एकत्रीकरण ढांचे का उपयोग करें वांछित परिणाम प्राप्त करने के लिए। एकत्रीकरण सेट ऑपरेटर यह जादू करेगा $setIntersection
।
निम्नलिखित एकत्रीकरण पाइपलाइन वह हासिल करती है जो आप चाहते हैं:
db.test.aggregate([
{
"$match": {
"_id": { "$in": [1, 3] }
}
},
{
"$group": {
"_id": 0,
"set1": { "$first": "$set" },
"set2": { "$last": "$set" }
}
},
{
"$project": {
"set1": 1,
"set2": 1,
"commonToBoth": { "$setIntersection": [ "$set1", "$set2" ] },
"_id": 0
}
}
])
आउटपुट :
/* 0 */
{
"result" : [
{
"set1" : [1,2,3,4,5],
"set2" : [1,2,5,10,22],
"commonToBoth" : [1,2,5]
}
],
"ok" : 1
}
अपडेट करें
तीन या अधिक दस्तावेज़ों को प्रतिच्छेद करने के लिए, आपको $reduce
. की आवश्यकता होगी सरणियों को समतल करने के लिए ऑपरेटर। यह आपको किसी भी संख्या में सरणियों को प्रतिच्छेद करने की अनुमति देगा, इसलिए डॉक्स 1 और 3 से केवल दो सरणियों का प्रतिच्छेदन करने के बजाय, यह कई सरणियों पर भी लागू होगा।
निम्नलिखित समग्र संचालन चलाने पर विचार करें:
db.test.aggregate([
{ "$match": { "_id": { "$in": [1, 3] } } },
{
"$group": {
"_id": 0,
"sets": { "$push": "$set" },
"initialSet": { "$first": "$set" }
}
},
{
"$project": {
"commonSets": {
"$reduce": {
"input": "$sets",
"initialValue": "$initialSet",
"in": { "$setIntersection": ["$$value", "$$this"] }
}
}
}
}
])