sql >> Database teknologi >  >> NoSQL >> MongoDB

Filtrer underdokumentarray, mens de stadig returnerer overordnede data, hvis de er tomme

Du kan bruge $redact i stedet for $match i dette tilfælde, sådan her

db.collectionName.aggregate({
  $redact:{
    $cond:{ 
       if:{$and:[{$not:"$dealerName"},{$not:"$title"},{$eq:["$listed",false]}, 
       then: "$$PRUNE", 
       else: "$$DESCEND" 
    }
  }
})

Vi har brug for første betingelse for at springe over dokumenter på øverste niveau, anden betingelse for at springe andet niveau over og tredje betingelse for at beskære køretøjer. Ingen $unwind nødvendig i dette tilfælde!

En ting mere:$redact kun tilgængelig i 2.6




  1. Mongo $i operatørydelse

  2. Opdatering af en rekord med mongoose

  3. Sådan bruger du MongoDB $ne på indlejret objektegenskab

  4. Sådan bruger du $unset og $set i kombination i mongoDB