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.