我在分组的时候无法得到具体属性的总和

时间:2015-01-05 16:35:10

标签: mongodb mongodb-query

我在mongodb中有一个很酷的选择:

{
    "_id" : ObjectId("5490a00879dc6a138dcefb0f"),
    "Date" : 20141012,
    "Type" : "Twitter",
    "Entities" : [ 
    {
        "ID" : 2,
        "Name" : "test1",
        "Sentiment" : {
            "Value" : 0.1,
            "Neutral" : 12
        }
    }    
    ]
}

我有几个。现在我想按日期进行分组,然后在每个日期对Sentiment中的值进行返回求和后,按照这样的方式对其进行分组:

    DBCollection collectionG;
    collectionG = db.getCollection("GraphDataCollection");
    DBObject groupFields = new BasicDBObject( "_id", "$Date");
    groupFields.put("Sentiment.value", new BasicDBObject( "$sum", 1));
    DBObject groupBy = new BasicDBObject("$group", groupFields ); 
    AggregationOutput output = collectionG.aggregate(where,  groupBy);

现在我的问题是sentiment.Value的总和不返回,只返回每个组中聚合的集合数。任何人都可以帮助我如何获得情绪中的价值总和吗?

更新

我替换了这一行:

groupFields.put("Sentiment.value", new BasicDBObject( "$sum", 1));

用这个:

groupFields.put("value", new BasicDBObject( "$sum", "$Entities.Sentiment.Value"));

现在我只获得0,尽管有很多非0值的情绪!!!

任何人都可以帮助我吗?

2 个答案:

答案 0 :(得分:1)

试试这个mongo查询

db.test.aggregate(
   [
     {
         $unwind : '$Entities'
     },
     {
       $group:
         {
           _id: {'Date' : '$Date'},
           sum: { $sum: '$Entities.Sentiment.Value' }
         }
     }
   ]
)

答案 1 :(得分:0)

我认为它有问题,因为实体是一个数组。所以它不理解你想要$sum值的方式。您是否希望它总结每个实体的所有情绪值,然后在与日期匹配的所有文档中总结这些总和?