MM们
从版本3.4开始,我们可以使用$switch允许在$group阶段中进行逻辑条件处理的运算符。当然我们仍然需要使用$sum累加器来返回总和。db.Sentiments.aggregate( [ { "$group": { "_id": "$Company", "SumPosSenti": { "$sum": { "$switch": { "branches": [ { "case": { "$gt": [ "$Sentiment", 0 ] }, "then": "$Sentiment" } ], "default": 0 } } }, "SumNegSenti": { "$sum": { "$switch": { "branches": [ { "case": { "$lt": [ "$Sentiment", 0 ] }, "then": "$Sentiment" } ], "default": 0 } } } }} ])如果您尚未迁移您mongod到3.4或更高版本,那么请注意,$project在这个阶段,答案是多余的,因为$cond运营商返回一个数值,这意味着你可以$group你的文件和应用$sum的$cond表达。这将改善您的应用程序的性能,尤其是对于大型集合。db.Sentiments.aggregate( [ { '$group': { '_id': '$Company', 'PosSentiment': { '$sum': { '$cond': [ { '$gt': ['$Sentiment', 0]}, '$Sentiment', 0 ] } }, 'NegSentiment': { '$sum': { '$cond': [ { '$lt': ['$Sentiment', 0]}, '$Sentiment', 0 ] } } }} ])考虑一个带有以下文档的集合Sentiments:{ "Company": "a", "Sentiment" : 2 }{ "Company": "a", "Sentiment" : 3 }{ "Company": "a", "Sentiment" : -1 }{ "Company": "a", "Sentiment" : -5 }聚合查询产生:{ "_id" : "a", "SumPosSenti" : 5, "SumNegSenti" : -6 }