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

interrogare i documenti che dipendono dai valori di altri documenti in mongodb

Prova non correlato sub query da 3.6 per il tuo caso d'uso.

Qualcosa come

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 per inserire "blockedIds" per l'ID di input seguito da $match per filtrare i documenti in cui "_id" non è nell'elenco degli ID bloccati.

$expr consente l'utilizzo di operatori di confronto di aggregazione nella fase di $match.

$arrayElemAt per recuperare il primo elemento dall'array $lookup.

$in per confrontare _id con blockIds.

$project con esclusione per rimuovere il campo "noncr" dalla risposta finale.

Tieni presente che quando esegui il test della query, utilizza il nome della raccolta non il nome del modello o il nome dello schema nell'attributo "da" della fase di ricerca.