Probieren Sie non-correlated aus Unterabfrage von 3.6 für Ihren Anwendungsfall.
Etwas wie
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
zum Abrufen der „blockedIds“ für die Eingabe-ID, gefolgt von $match
zum Filtern der Dokumente, bei denen "_id" nicht in der Liste der blockierten IDs enthalten ist.
$expr
ermöglicht die Verwendung von Aggregationsvergleichsoperatoren in der $match-Phase.
$arrayElemAt
um das erste Element aus dem $lookup-Array zu holen.
$in
um die _id mitblockedIds zu vergleichen.
$project
mit Ausschluss, um das Feld „noncr“ aus der endgültigen Antwort zu entfernen.
Bitte beachten Sie, dass Sie beim Testen der Abfrage den Sammlungsnamen und nicht den Modell- oder Schemanamen im "From"-Attribut der Suchphase verwenden.