您的位置:首页 > 编程语言 > Go语言

[Mongo] 按时间分组统计(group时间格式化)

2014-09-22 19:10 916 查看
分组的key可以使用原有的字段,也可以使用一个function来格式化日期。

/* 0 */
{
"_id" : ObjectId("541fcc51c6c36038bc6b81cd"),
"url" : "http://wifi21.com/",
"addtime" : ISODate("2014-08-19T00:15:02Z")
}

/* 1 */
{
"_id" : ObjectId("541fcc51c6c36038bc6b81ce"),
"url" : "http://meiwen.me/src/index.html",
"addtime" : ISODate("2014-08-19T00:15:07Z")
}
...


统计代码:

db.msds_accessrecord.group({
keyf : function(doc){
var date = new Date(doc.addtime);
var dateKey = ""+date.getFullYear()+"-"+(date.getMonth()+1)+"-"+date.getDate();
return {'day':dateKey}; //33
},
initial : {"count":0},
reduce : function Reduce(doc, out) {
if(doc.url){
out.count +=1;
}
}
});


这种方法会有时区的问题,new date() 会安照0时区来做转化,如果我们存储的时间为东八区,那么统计结果就会不对。

这种情况下就需要使用"$dayOfMonth"等方法直接提取。(http://docs.mongodb.org/manual/reference/operator/aggregation/dayOfMonth/

结合aggregate来使用  有时间后面会写下,最近在看

统计结果:

[
{
"day" : "2014-8-19",
"count" : 41
},
{
"day" : "2014-8-22",
"count" : 28
},
...
]


参考: http://stackoverflow.com/questions/5168904/group-by-dates-in-mongodb

本文出自 “orangleliu笔记本” 博客,请务必保留此出处 http://blog.csdn.net/orangleliu/article/details/39480359
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息