MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Filtern Sie das Filialdokument-Array, während Sie immer noch übergeordnete Daten zurückgeben, wenn sie leer sind

Sie könnten in diesem Fall $redact anstelle von $match verwenden, so

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

Wir brauchen die erste Bedingung, um Dokumente der obersten Ebene zu überspringen, die zweite Bedingung, um die zweite Ebene zu überspringen, und die dritte, um Fahrzeuge zu beschneiden. Keine Entspannung nötig in diesem Fall!

Noch etwas:$redact nur in 2.6 verfügbar