sql >> Database >  >> NoSQL >> MongoDB

documenten opvragen die afhankelijk zijn van waarden van andere documenten in mongodb

Probeer niet-gecorreleerd subquery van 3.6 voor uw gebruik.

Iets als

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 om de "blockedIds" voor invoer-ID in te voeren, gevolgd door $match om de documenten te filteren waar "_id" niet in de lijst met geblokkeerde ID's staat.

$expr staat het gebruik van aggregatievergelijkingsoperatoren toe in de $match-fase.

$arrayElemAt om het eerste element uit de $lookup-array op te halen.

$in om de _id te vergelijken met geblokkeerde id's.

$project met uitsluiting om het veld "noncr" uit het uiteindelijke antwoord te verwijderen.

Let op:wanneer u een testquery uitvoert, gebruikt u de collectienaam en niet de model- of schemanaam in het kenmerk "from" van de opzoekfase.



  1. Spring Data Mongo Repository::Gemeenschappelijke gedeelde methode voor alle Repo-problemen

  2. Vind de meest recente en dichtstbijzijnde berichten, limiet 20

  3. Hoe mongoDB-gegevens exporteren naar een CSV-indeling?

  4. Mongoose pre.save() asynchrone middleware werkt niet zoals verwacht