2014-12-26 91 views
2

我有一个蒙戈收集以下数据(数据收集):蒙戈DB合计不工作

{ 
    "_id": ObjectId("54980efef7db7d9b018d375b"), 
    "sub_id": "1234567890", 
    "points": "10", 
    "oid": "1", 
    "name": "test", 
    "app": "e53abc6d12fea63c80e4c2e1d49e", 
    "source": "mysource", 
    "product_name": "browser", 
    "added": ISODate("2014-12-22T12:30:54.618Z"), 
    "added_human": "2014-12-22 06:30:54", 
    "checked": true 
} 

其实我需要找出按日期分组分的总和。 SQL查询将如下所示: SELECT DATE(添加)为point_date,SUM(points)AS total_points FROM mytable WHERE在'从'和'到'GROUP BY DATE(已添加)之间添加。

所以我用下面的聚合:

db.datacollection.aggregate(
    { 
     $match:{ 
      "added" : {$gte:ISODate("2014-12-01"), $lt:ISODate("2014-12-25")}, 
      "source":"mysource" 
     }, 
     $group : { 
      "_id" : { month: { $month: "$added" }, day: { $dayOfMonth: "$added" }, year: { $year: "$added" } }, 
      "total_points":{$sum:"$points"} 
     } 
    } 
); 

但这正显示出

"errmsg" : "exception: A pipeline stage specification object must contain exactly one field.", 

这可怎么固定的或者是有没有做这种计算没有更好的方法?

+0

我认为你应该将你的'points'数据类型字符串改为整型或浮点型。 – Yogesh

+0

是的。但是,我怎样才能在飞行中做到这一点? –

+0

您不会随时更改数据类型,首先您应该将您的集合更新为适当的数据类型,然后使用mongo聚合。为了您的参考检查这个http://stackoverflow.com/questions/18138750/mongodb-aggregate-sum – Yogesh

回答

9

使用本:

db.datacollection.aggregate(
    { 
     $match:{ 
      "added" : {$gte:ISODate("2014-12-01"), $lt:ISODate("2014-12-25")}, 
      "source":"mysource" 
     } 
    }, 
    { $group : { 
      "_id" : { month: { $month: "$added" }, day: { $dayOfMonth: "$added" }, year: { $year: "$added" } }, 
      "total_points":{$sum:"$points"} 
     } 
    } 
); 

你应该(在{}对每一个管道中)使用此格式

db.collection.aggrgation ( 
    { $group: ....}, 
    { $match : .... }, 
    ... 
}) 

,但你使用:

db.collection.aggrgation ( 
    { $group: ...., 
    $match : ...., 
    ... 
    } 
}) 
+0

这显示像total_points作为0.it的结果没有采取SUM。我需要键入转换值? –

+0

但我得到了您的示例文档的结果。结果:{ “结果”:[ { “_id”:{ “月”:12, “日”:22, “年”:2014 }, “total_points”:0 } ] , “ok”:1 } – Disposer

+0

是的。我也将total_points作为零。我需要得到10分值为10.或者如果有其他记录,它应该显示总金额 –

0

的总操作需要在组内{}