我在 mongo 集合 (datacollection) 中有以下数据:
{
"_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(added) as point_date, SUM(points) AS total_points FROM mytable WHERE added between 'from' AND 'to' GROUP BY DATE(added).
所以我正在使用以下聚合:
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.",
如何解决这个问题,或者是否有更好的方法来进行此计算??
最佳答案
使用这个:
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 : ....,
...
}
})
关于mongodb - Mongodb 聚合不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27656102/