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

Dokumente abfragen, die von Werten anderer Dokumente in mongodb abhängen

Probieren Sie non-correlated aus Unterabfrage von 3.6 für Ihren Anwendungsfall.

Etwas wie

User.aggregate(
 [{$lookup:{
   from: "users",
   pipeline:[
    {$match: {_id:mongoose.Types.ObjectId(id)}},
    {$project: {_id:0,blockedIds:1}}
   ],
   as: "noncr"
 }},
 {$match:{
   $expr:{
     $not:[
      {$in:[
        $_id,
        {$arrayElemAt:["$noncr.blockedIds",0]}
      ]}
    ]
  }
}},
{$project:{noncr:0}}]
)

$lookup zum Abrufen der „blockedIds“ für die Eingabe-ID, gefolgt von $match zum Filtern der Dokumente, bei denen "_id" nicht in der Liste der blockierten IDs enthalten ist.

$expr ermöglicht die Verwendung von Aggregationsvergleichsoperatoren in der $match-Phase.

$arrayElemAt um das erste Element aus dem $lookup-Array zu holen.

$in um die _id mitblockedIds zu vergleichen.

$project mit Ausschluss, um das Feld „noncr“ aus der endgültigen Antwort zu entfernen.

Bitte beachten Sie, dass Sie beim Testen der Abfrage den Sammlungsnamen und nicht den Modell- oder Schemanamen im "From"-Attribut der Suchphase verwenden.