/* 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