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.