sql >> Databasteknik >  >> NoSQL >> MongoDB

fråga efter dokument som är beroende av värden för andra dokument i mongodb

Prova icke-korrelerade underfråga från 3.6 för ditt användningsfall.

Något 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 för att hämta "blockedIds" för inmatnings-id följt av code>$match för att filtrera dokument där "_id" inte finns i listan över blockerade ID.

$expr tillåter användning av aggregationsjämförelseoperatorer i $match-stadiet.

$arrayElemAt för att hämta det första elementet från $lookup array.

$in för att jämföra _id med blockedIds.

$project med undantag för att ta bort "noncr"-fältet från det slutliga svaret.

Observera att när du testfråga använder samlingens namn, inte modell- eller schemanamn i "från"-attributet för uppslagsstadiet.



  1. ObjectID lagrar inte hexadecimalt värde

  2. Hur ändrar man datatyp för kapslat fält i Mongo-dokument?

  3. Redis pub/sub för chattserver i node.js

  4. sails-mongo auth-fel i sails 0.10