MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

interroger les documents qui dépendent des valeurs d'autres documents dans mongodb

Essayez non corrélé sous-requête de 3.6 pour votre cas d'utilisation.

Quelque chose comme

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 pour extraire les "blockedIds" pour l'identifiant d'entrée suivi de $match pour filtrer les documents où "_id" n'est pas dans la liste des ID bloqués.

$expr permet l'utilisation d'opérateurs de comparaison d'agrégation dans l'étape $match.

$arrayElemAt pour récupérer le premier élément du tableau $lookup.

$in pour comparer le _id avec les blockids.

$project avec exclusion pour supprimer le champ "noncr" de la réponse finale.

Veuillez noter que lorsque vous testez la requête, utilisez le nom de la collection et non le nom du modèle ou du schéma dans l'attribut "from" de l'étape de recherche.