我正在尝试在 Mongo 中按日期聚合数据,但我无法完全实现我想要的。现在,我正在使用这个:
db.aggregData.aggregate( { $group: {_id: "$Date".toString(),
tweets: { $sum: "$CrawledTweets"} } },
{ $match:{ _id: {$gte: ISODate("2013-03-19T12:31:00.247Z") }}},
{ $sort: {Date:-1} }
)
结果是这样的:
"result" : [
{
"_id" : ISODate("2013-03-19T12:50:00.641Z"),
"tweets" : 114
},
{
"_id" : ISODate("2013-03-19T12:45:00.631Z"),
"tweets" : 114
},
{
"_id" : ISODate("2013-03-19T12:55:00.640Z"),
"tweets" : 123
},
{
"_id" : ISODate("2013-03-19T12:40:00.628Z"),
"tweets" : 91
},
{
"_id" : ISODate("2013-03-19T12:31:00.253Z"),
"tweets" : 43
},
{
"_id" : ISODate("2013-03-19T13:20:00.652Z"),
"tweets" : 125
},
{
"_id" : ISODate("2013-03-19T12:31:00.252Z"),
"tweets" : 30
}
],
"ok" : 1
它似乎可以完成这项工作,但经过进一步检查,我们发现存在重复:
ISODate("2013-03-19T12:31:00.253Z") 和 ISODate("2013-03-19T12:31:00.252Z") .
唯一改变的是 Z 之前的最后一位。
所以这是我的问题。这部分是什么?我该怎么做才能在聚合中忽略它?
先感谢您。
编辑:我想按日期汇总,所以全年/月/日+小时和分钟。其余的我不关心。
编辑:我的数据库在 mongolab,所以我在 2.2
好吧,我以另一种方式做到了:我将所有日期的秒/毫秒保存为 0。所以我可以保留一个简单的聚合,而不需要更多的代码服务器端,这要感谢 moment.js