2017-08-14 105 views
0

中编写条件语句我很新的蒙戈,并有关于集合查询有条件计算一个问题:MongoDB的 - 如何汇总查询

我有一个评论集合,每个文档包含景气指数。我想:

1)项

2)组评审获取平均景气指数为跨该商品的所有评论每个项目和排序的评语此

3)获得总#为每个项目组

4)获取的阳性情绪的评价总#每个项目(例如,与情绪分数#评论> 75)

5)获取的负面情绪的评价总#每个项目(例如,#情绪分数为的评论75)

到目前为止,我有以下查询覆盖1-3,但不知道如何在这里得到4/5,以及:

db.reviews.aggregate( 
    {"$group" : 
     {_id: "$item", 
     sentiment: {$avg : "$sentimentScore"}, 
     count: {$sum: 1 } 
     } 
    }, 
    {"$sort": { sentiment: -1 } } 
) 
+0

您需要提供样本文件 –

+0

Januka嗨,文件的唯一重要字段中所示的那些代码 - “sentimentScore”是0到100之间的一个#,以及是项目名称的“item”。我想要做的就是添加代码我有这样的我有2个新字段返回给我的每个组项目,其中一个是该组中的项目#情绪分数<75和一个为> 75 – jbug123

回答

0

我假设你想sentiment分别有count字段与负值和正值与给定的门槛,即positive - >75negative - <75,即积极情绪总数和消极情绪总数以及总情绪。

db.sentiments.aggregate([ 
    {"$group" : 
     {_id: "$item", 
     sentiment: {$avg : "$sentiment_score"}, 
     postiive_sentiments: {$sum: { $cond: { if: { $gt: [ "$sentiment_score", 75 ] }, then: 1, else: 0 } }}, 
     negative_sentiments: {$sum: { $cond: { if: { $lt: [ "$sentiment_score", 75 ] }, then: 1, else: 0 } }}, 
     count: {$sum: 1 } 
     } 
    }, 
    {"$sort": { sentiment: -1 } } 
]) 

的样本数据:

{ "_id" : ObjectId("5991329ea37dbc24842a68be"), "item" : "test1", "sentiment_score" : 50 } 
{ "_id" : ObjectId("599132a2a37dbc24842a68bf"), "item" : "test1", "sentiment_score" : 40 } 
{ "_id" : ObjectId("599132a4a37dbc24842a68c0"), "item" : "test1", "sentiment_score" : 80 } 
{ "_id" : ObjectId("599132aba37dbc24842a68c1"), "item" : "test2", "sentiment_score" : 80 } 
{ "_id" : ObjectId("599132ada37dbc24842a68c2"), "item" : "test2", "sentiment_score" : 30 } 
{ "_id" : ObjectId("599132b0a37dbc24842a68c3"), "item" : "test2", "sentiment_score" : 38 } 
{ "_id" : ObjectId("599132b6a37dbc24842a68c4"), "item" : "test3", "sentiment_score" : 78 } 
{ "_id" : ObjectId("599132b9a37dbc24842a68c5"), "item" : "test3", "sentiment_score" : 88 } 
{ "_id" : ObjectId("599132bba37dbc24842a68c6"), "item" : "test3", "sentiment_score" : 58 } 
{ "_id" : ObjectId("599132c4a37dbc24842a68c7"), "item" : "test3", "sentiment_score" : 98 } 
{ "_id" : ObjectId("599132cba37dbc24842a68c8"), "item" : "test4", "sentiment_score" : 65 } 
{ "_id" : ObjectId("599132d2a37dbc24842a68c9"), "item" : "test4", "sentiment_score" : 30 } 
{ "_id" : ObjectId("599132d6a37dbc24842a68ca"), "item" : "test4", "sentiment_score" : 10 } 

//结果:

{ "_id" : "test3", "sentiment" : 80.5, "negative_sentiments" : 3, "positive_sentiments" : 1, "count" : 4 } 
{ "_id" : "test1", "sentiment" : 56.666666666666664, "negative_sentiments" : 1, "positive_sentiments" : 2, "count" : 3 } 
{ "_id" : "test2", "sentiment" : 49.333333333333336, "negative_sentiments" : 1, "positive_sentiments" : 2, "count" : 3 } 
{ "_id" : "test4", "sentiment" : 35, "negative_sentiments" : 0, "positive_sentiments" : 3, "count" : 3 } 
+0

谢谢!工作很好。 – jbug123