एकत्रीकरण ढांचे के माध्यम से एक बार में बहुत संभव है। .
MongoDb 3.6 और नए के साथ, आप <के उपयोग का लाभ उठा सकते हैं कोड>$arrayToObject
$replaceRoot
के भीतर ऑपरेटर
वांछित परिणाम प्राप्त करने के लिए पाइपलाइन।
पाइपलाइन में, <का लाभ उठाएं कोड>$cond
$group<में ऑपरेटर /कोड>
परम फ़ील्ड बूलियन मान के आधार पर गणनाओं का मूल्यांकन करने के लिए चरण, निम्न जैसा कुछ:
db.getCollection('patients').aggregate([
{ "$project": { "_id": 0 } },
{ "$project": { "data": { "$objectToArray": "$$ROOT" } } },
{ "$unwind": "$data" },
{ "$group": {
"_id": "$data.k",
"count": {
"$sum": {
"$cond": [ "$data.v", 1, 0 ]
}
}
} },
{ "$group": {
"_id": null,
"counts": {
"$push": { "k": "$_id", "v": "$count" }
}
} },
{ "$project": {
"data": { "$arrayToObject": "$counts" }
} },
{ "$replaceRoot": { "newRoot": "$data" } }
])
MongoDB संस्करणों के लिए जिनके पास उपरोक्त के लिए समर्थन नहीं है $arrayToObject
और $replaceRoot
ऑपरेटरों, आपको रकम की गणना करते समय समूह पाइपलाइन में स्पष्ट रूप से फ़ील्ड निर्दिष्ट करने की आवश्यकता होगी:
db.getCollection('patients').aggregate([
{ "$group": {
"_id": null,
"param1_count": {
"$sum": {
"$cond": [ "$param1", 1, 0 ] /* similar to "$cond": [ { "$eq": [ "$param1", true ] }, 1, 0 ] */
}
},
"param2_count": {
"$sum": {
"$cond": [ "$param2", 1, 0 ]
}
},
"param3_count": {
"$sum": {
"$cond": [ "$param3", 1, 0 ]
}
},
"param4_count": {
"$sum": {
"$cond": [ "$param4", 1, 0 ]
}
}
} },
{ "$project": {
"_id": 0,
"param_counts": {
"param1": "$param1_count",
"param2": "$param2_count",
"param3": "$param3_count",
"param4": "$param4_count"
}
} }
])