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.