我在分组时无法获得特定属性的总和

I can not get the sum of specific attribute while I do group by

我有一个收藏如下 mongodb:

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

我有几个。现在我想按日期分组,然后在 return 对每个日期分组的 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 的总和不是 return,只是 collections 在每个组中聚合的计数是 returned。任何人都可以帮助我如何获得情绪值的总和吗?

更新:

我替换了这一行:

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

用这个:

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

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

谁能帮帮我?

我认为它有问题,因为 Entities 是一个数组。所以它不明白你想如何 $sum 提高价值。您是否希望它对每个实体的所有情感值求和,然后在与日期匹配的所有文档中对这些总和求和?

试试这个 mongo 查询

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