Prøv ikke-korreleret underforespørgsel fra 3.6 til dit brugstilfælde.
Noget 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
for at trække "blockedIds" til input-id efterfulgt af
kode>$match
for at filtrere de dokumenter, hvor "_id" ikke er på listen over blokerede id'er.
$expr
tillader brug af aggregeringssammenligningsoperatorer i $match-stadiet.
$arrayElemAt
for at hente det første element fra $lookup array.
$in
at sammenligne _id'et med blokerede id'er.
$project
med udelukkelse for at fjerne "noncr"-feltet fra det endelige svar.
Bemærk venligst, at når du testforespørger, skal du bruge samlingsnavnet, ikke model- eller skemanavnet i "fra"-attributten for opslagsstadiet.