{ "$sum": 1 }
हटाएं और { "$sum": 0 }
आपके if/else
. में भाव सशर्त ब्लॉक, उन्हें मान 1 और 0 (क्रमशः प्रत्येक सशर्त ब्लॉक के लिए) के साथ प्रतिस्थापित करें।
अन्य $cond
सिंटैक्स जो if/else
. को छोड़ देता है ब्लॉक:
db.names.aggregate([
{
"$group": {
"_id": "$name",
"error": {
"$sum": {
"$cond": [ { "$eq": [ "$loglevel", "ERROR" ] }, 1, 0]
}
},
"warning":{
"$sum": {
"$cond": [ { "$eq": [ "$loglevel", "WARNING" ] }, 1, 0 ]
}
},
"info": {
"$sum": {
"$cond": [ { "$eq": [ "$loglevel", "INFO" ] }, 1, 0 ]
}
}
}
}
])
या संभावित स्थितियों की एक सरणी को देखते हुए गतिशील रूप से पाइपलाइन बनाएं:
var statuses = ["ERROR", "WARNING", "INFO"],
groupOperator = { "$group": { "_id": "$name" } };
statuses.forEach(function (status){
groupOperator["$group"][status.toLowerCase()] = {
"$sum": {
"$cond": [ { "$eq": [ "$loglevel", status ] }, 1, 0]
}
}
});
db.names.aggregate([groupOperator]);
आउटपुट
/* 1 */
{
"_id" : "t1",
"error" : 2,
"warning" : 3,
"info" : 1
}
/* 2 */
{
"_id" : "t2",
"error" : 4,
"warning" : 0,
"info" : 1
}
/* 3 */
{
"_id" : "t3",
"error" : 0,
"warning" : 0,
"info" : 1
}