我在mongodb中的集合类似于SQL中的下表:

感情(陪伴、感情)

现在,我需要执行如下查询:

SELECT
  Company, 
  SUM(CASE WHEN Sentiment >0 THEN Sentiment ELSE 0 END) AS SumPosSenti, 
  SUM(CASE WHEN Sentiment <0 THEN Sentiment ELSE 0 END) AS SumNegSenti
FROM Sentiments
GROUP BY Company

我应该怎么做才能在Mongo中编写这个查询?我被以下问题困住了:

db.Sentiments.aggregate(
{ $project: {_id:0, Company:1, Sentiment: 1} },
{ $group: {_id: "$Company", SumPosSenti: {$sum: ? }, SumNegSenti: {$sum: ? } } }
);

推荐答案

正如Sammaye所建议的,您需要使用$cond聚合投影操作符来实现这一点:

db.Sentiments.aggregate(
    { $project: {
        _id: 0,
        Company: 1,
        PosSentiment: {$cond: [{$gt: ['$Sentiment', 0]}, '$Sentiment', 0]},
        NegSentiment: {$cond: [{$lt: ['$Sentiment', 0]}, '$Sentiment', 0]}
    }},
    { $group: {
        _id: "$Company",
        SumPosSentiment: {$sum: '$PosSentiment'},
        SumNegSentiment: {$sum: '$NegSentiment'}
    }});

Mongodb相关问答推荐

映射数组值并查找每个匹配的集合

如何用Python和MongoDB找到单据字段的最大值?

Mongo,通过 Lookup 计算多个文档中数组中的项目

MongoDB - 来自先前匹配文档的聚合匹配字段

Mongodb 按数组元素聚合组

程序可以运行,但我不断收到发送到客户端后无法设置标题,我应该忽略它吗?

MongoDB:如何将所有文档合并到聚合管道中的单个文档中

Mongoose $inc 枚举验证失败

有谁知道这个错误的修复方法(TypeError: Cannot assign to read only property ‘map’ of object '#')

更新 MongoDB 中嵌套实体数组中的属性

.save() 不是函数 Mongoose

Mongodb:查询嵌套在数组中的json对象

Golang/mgo:如何让 MongoDB 在字段中使用当前时间?

django 和 mongodb 是否使迁移成为过go ?

什么是 mongodb 中的admin数据库?

Mongoose 不创建新集合

MongoDb:如何将附加对象插入对象集合?

使用 Java 驱动程序更新 MongoDB 中的数组

判断 mongoDB 是否连接

如何仅通过一次调用将一组对象保存到mongoose数据库?