Wypróbuj nieskorelowane podzapytanie z 3.6 dla twojego przypadku użycia.
Coś jak
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
pobrać „blockedIds” dla identyfikatora wejściowego, po którym następuje $match
aby filtrować dokumenty, w których "_id" nie znajduje się na liście zablokowanych identyfikatorów.
$expr
pozwala na użycie operatorów porównania agregacji na etapie $match.
$arrayElemAt
aby pobrać pierwszy element z tablicy $lookup.
$in
aby porównać _id z zablokowanymi identyfikatorami.
$project
z wykluczeniem usunięcia pola „noncr” z końcowej odpowiedzi.
Pamiętaj, że podczas testowania zapytania użyj nazwy kolekcji, a nie nazwy modelu lub schematu w atrybucie „from” etapu wyszukiwania.