एक ही पाइपलाइन में कई फ़ील्ड्स पर काउंट करने के लिए $facet का उपयोग करें।
डेमो डेटा
db.demo721.insertOne({
"details1": { "id":101 },
"details2": { "id":101 },
"details3": { "id":101 }
});
db.demo721.insertOne({
"details1": { "id":101 },
"details2": { "id":102 },
"details3": { "id":102 }
});
क्वेरी
db.demo721.aggregate([
{$facet:{
ids:[
{$group:{ _id:null,
d3:{$addToSet: "$details3.id"},
d2:{$addToSet:"$details2.id"},
d1:{$addToSet:"$details1.id"}
}},
{$project:{ _id:0, listofall:{$setUnion:["$d1","$d2","$d3"]}}}
],
d:[{$project:{ _id:0, a1:"$details1.id", a2:"$details2.id", a3:"$details3.id"}}]
}},
{$unwind:"$d"},
{$unwind:"$ids"},
{$unwind:"$ids.listofall"},
{$group:{
_id:"$ids.listofall",
details1id:{$sum:{$cond:[{$eq:["$d.a1","$ids.listofall"]},1,0]}},
details2id:{$sum:{$cond:[{$eq:["$d.a2","$ids.listofall"]},1,0]}},
details3id:{$sum:{$cond:[{$eq:["$d.a3","$ids.listofall"]},1,0]}}
}}
])
परिणाम
{ "_id" : 102, "details1id" : 0, "details2id" : 1, "details3id" : 1 }
{ "_id" : 101, "details1id" : 2, "details2id" : 1, "details3id" : 1 }
यह प्रत्येक ID के लिए तीनों फ़ील्ड्स में घटनाओं की गिनती दिखाता है।