sql >> Databasteknik >  >> NoSQL >> MongoDB

Filtrera underdokumentarray samtidigt som överordnad data returneras om den är tom

Du kan använda $redact istället för $match i det här fallet, så här

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

Vi behöver första villkoret för att hoppa över dokument på toppnivå, andra villkoret för att hoppa över andra nivån och tredje villkoret för att beskära fordon. Inga $unwind behövs i det här fallet!

En sak till:$redact endast tillgänglig i 2.6




  1. Konvertera från LinkedHashMap till Json String

  2. mongodb - avveckling av kapslade underdokument

  3. Hur grupperar man kapslade inlägg med MongoDB-aggregationsramverk?

  4. render_template med flera variabler