एकत्रीकरण पाइपलाइन के भीतर, MongoDB संस्करण 3.6 और नए के लिए, आप $arrayToObject
ऑपरेटर और एक $replaceRoot
वांछित JSON आउटपुट प्राप्त करने के लिए पाइपलाइन। यह कॉल फ़ील्ड के अज्ञात मानों के लिए अच्छा काम करता है।
आपको निम्नलिखित समग्र पाइपलाइन चलाने की आवश्यकता होगी:
db.collection.aggregate([
{ "$group": {
"_id": {
"name": "$name",
"call": "$call"
},
"count": { "$sum": 1 }
} },
{ "$group": {
"_id": "$_id.name",
"counts": {
"$push": {
"k": "$_id.call",
"v": "$count"
}
},
"nameCount": { "$sum": 1 }
} },
{ "$replaceRoot": {
"newRoot": {
"$mergeObjects": [
{ "$arrayToObject": "$counts" },
"$$ROOT"
]
}
} },
{ "$project": { "counts": 0 } }
])
पिछले MongoDB संस्करणों के लिए, जिनके पास उपरोक्त ऑपरेटरों के लिए समर्थन नहीं है, $cond
$group<में ऑपरेटर /कोड>
ज्ञात कॉल
. के आधार पर गणनाओं का मूल्यांकन करने का चरण मान, निम्न जैसा कुछ:
db.collection.aggregate([
{ "$group": {
"_id": "$name",
"nameCount": { "$sum": 1 },
"Success Call": {
"$sum": {
"$cond": [ { "$eq": [ "$call", "Success Call" ] }, 1, 0]
}
},
"Repeat Call": {
"$sum": {
"$cond": [ { "$eq": [ "$call", "Repeat Call" ] }, 1, 0]
}
},
"Unsuccess Call": {
"$sum": {
"$cond": [ { "$eq": [ "$call", "Unsuccess Call" ] }, 1, 0]
}
}
} },
{ "$project": {
"_id": 0,
"name": "$_id",
"nameCount": 1,
"Success Call":1,
"Unsuccess Call":1,
"Repeat Call":1
} }
])