Zkuste nekorelované dílčí dotaz z 3.6 pro váš případ použití.
Něco jako
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
vytáhněte "blockedIds" pro vstupní ID následované $match
pro filtrování dokumentů, kde "_id" není v seznamu blockedIds.
$expr
umožňuje použití operátorů porovnání agregace ve fázi $match.
$arrayElemAt
k načtení prvního prvku z pole $lookup.
$in
pro porovnání _id s blockedIds.
$project
s vyloučením k odstranění pole „noncr“ z konečné odpovědi.
Vezměte prosím na vědomí, že při testovacím dotazu použijte název kolekce, nikoli název modelu nebo schématu v atributu „from“ ve fázi vyhledávání.