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

forespørg på dokumenter, der afhænger af værdier af andre dokumenter i mongodb

Prøv ikke-korreleret underforespørgsel fra 3.6 til dit brugstilfælde.

Noget som

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 for at trække "blockedIds" til input-id efterfulgt af kode>$match for at filtrere de dokumenter, hvor "_id" ikke er på listen over blokerede id'er.

$expr tillader brug af aggregeringssammenligningsoperatorer i $match-stadiet.

$arrayElemAt for at hente det første element fra $lookup array.

$in at sammenligne _id'et med blokerede id'er.

$project med udelukkelse for at fjerne "noncr"-feltet fra det endelige svar.

Bemærk venligst, at når du testforespørger, skal du bruge samlingsnavnet, ikke model- eller skemanavnet i "fra"-attributten for opslagsstadiet.



  1. Mongo shell kan ikke oprette forbindelse til Azure CosmosDB

  2. elemMatch kombineret med andre forespørgselsfelter i Mongoose

  3. MongoDB:Opdatering af hvert dokument i en samling

  4. Mongodb Cxx Driver Test går ned i Release Build [Fungerer fint i Debug]