MongoDb 3.4 और नए के साथ, आप $arrayToObject
के उपयोग का लाभ उठा सकते हैं वांछित परिणाम प्राप्त करने के लिए ऑपरेटर। आपको निम्नलिखित समग्र पाइपलाइन चलाने की आवश्यकता होगी:
db.collection.aggregate([
{ "$group": {
"_id": {
"date": "$install_date",
"platform": { "$toLower": "$platform" }
},
"count": { "$sum": 1 }
} },
{ "$group": {
"_id": "$_id.date",
"counts": {
"$push": {
"k": "$_id.platform",
"v": "$count"
}
}
} },
{ "$addFields": {
"install_date": "$_id",
"platform": { "$arrayToObject": "$counts" }
} },
{ "$project": { "counts": 0, "_id": 0 } }
])
पुराने संस्करणों के लिए, $cond
. का लाभ उठाएं $group
. में ऑपरेटर प्लेटफ़ॉर्म फ़ील्ड मान के आधार पर गणनाओं का मूल्यांकन करने के लिए पाइपलाइन चरण, निम्न जैसा कुछ:
db.collection.aggregate([
{ "$group": {
"_id": "$install_date",
"android_count": {
"$sum": {
"$cond": [ { "$eq": [ "$platform", "android" ] }, 1, 0 ]
}
},
"ios_count": {
"$sum": {
"$cond": [ { "$eq": [ "$platform", "ios" ] }, 1, 0 ]
}
},
"facebook_count": {
"$sum": {
"$cond": [ { "$eq": [ "$platform", "facebook" ] }, 1, 0 ]
}
},
"kindle_count": {
"$sum": {
"$cond": [ { "$eq": [ "$platform", "kindle" ] }, 1, 0 ]
}
}
} },
{ "$project": {
"_id": 0, "install_date": "$_id",
"platform": {
"android": "$android_count",
"ios": "$ios_count",
"facebook": "$facebook_count",
"kindle": "$kindle_count"
}
} }
])
उपरोक्त में, $cond
तार्किक स्थिति लेता है क्योंकि यह पहला तर्क (यदि) है और फिर दूसरा तर्क देता है जहां मूल्यांकन सत्य है (तब) या तीसरा तर्क जहां झूठा (अन्य)। यह $sum
. को फीड करने के लिए 1 और 0 में सही/गलत रिटर्न देता है क्रमश।
तो उदाहरण के लिए, यदि { "$eq": [ "$platform", "facebook" ] },
सत्य है तो व्यंजक { $sum: 1 }
. का मूल्यांकन करेगा अन्यथा यह { $sum: 0 }
. होगा