आप एकत्रीकरण ढांचे के साथ पूर्ण समाधान से बहुत दूर नहीं थे - $group
से पहले आपको एक और चीज़ की आवश्यकता थी कदम और वह कुछ ऐसा है जो आपको यह देखने की अनुमति देगा कि क्या उपयोग की जा रही सभी चीजें किसी स्वामित्व वाली चीज़ से मेल खाती हैं।
ये है पूरी पाइपलाइन
> db.house.aggregate(
{'$unwind':'$uses'},
{'$unwind':'$rooms'},
{'$unwind':'$rooms.owns'},
{$project: { _id:0,
houseId:1,
uses:"$uses.name",
isOkay:{$cond:[{$eq:["$uses.name","$rooms.owns.name"]}, 1, 0]}
}
},
{$group: { _id:{house:"$houseId",item:"$uses"},
hasWhatHeUses:{$sum:"$isOkay"}
}
},
{$match:{hasWhatHeUses:0}})
और आपके दस्तावेज़ पर इसका आउटपुट
{
"result" : [
{
"_id" : {
"house" : 123,
"item" : "sofa"
},
"hasWhatHeUses" : 0
}
],
"ok" : 1
}
स्पष्टीकरण - एक बार जब आप दोनों सरणियों को खोल देते हैं तो अब आप उन तत्वों को फ़्लैग करना चाहते हैं जहाँ उपयोग की गई वस्तु स्वामित्व वाली वस्तु के बराबर है और उन्हें एक गैर-0 "स्कोर" दें। अब जब आप चीजों को houseId द्वारा फिर से समूहित करते हैं तो आप जांच सकते हैं कि क्या किसी भी इस्तेमाल की गई वस्तु का मिलान नहीं हुआ है। स्कोर के लिए 1 और 0 का उपयोग करने से आप योग कर सकते हैं और अब आइटम के लिए एक मैच जिसमें योग 0 है इसका मतलब है कि इसका उपयोग किया गया था लेकिन "स्वामित्व" में कुछ भी मेल नहीं खाता था। आशा है आपको यह पसंद आया होगा!