गैर-सहसंबद्ध आज़माएं आपके उपयोग के मामले के लिए 3.6 से उप क्वेरी।
कुछ इस तरह
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
इनपुट आईडी के लिए "blockedIds" और उसके बाद $match
उन दस्तावेज़ों को फ़िल्टर करने के लिए जहां "_id" अवरुद्ध आईडी की सूची में नहीं है।
$expr
$match चरण में एकत्रीकरण तुलना ऑपरेटरों के उपयोग की अनुमति देता है।
$arrayElemAt
$lookup सरणी से पहला तत्व लाने के लिए।
$in
अवरुद्ध आईडी के खिलाफ _id की तुलना करने के लिए।
$project
अंतिम प्रतिक्रिया से "noncr" फ़ील्ड को निकालने के लिए बहिष्करण के साथ।
कृपया ध्यान दें कि जब आप क्वेरी का परीक्षण करते हैं तो लुक अप स्टेज की "से" विशेषता में संग्रह नाम का उपयोग करें न कि मॉडल या स्कीमा नाम का।