我在mongodb中有以下文档{ "_id" : ObjectId("4f956dee76ddb26752026e8f"), "page" : "home", "visited" : ISOdate(23/02/2013) }, { "_id" : ObjectId("4f956dee76ddb26752026e8f"), "page" : "home", "visited" : ISOdate(24/02/2013) }, { "_id" : ObjectId("4f956dee76ddb26752026e8f"), "page" : "home", "visited" : ISOdate(24/02/2013) } , { "_id" : ObjectId("4f956dee76ddb26752026e8f"), "page" : "home", "visited" : ISOdate(25/02/2013) }
我希望使用nodejs获取mongodb中的计数。它应该返回:day: 23/02/2013, count:1 , day: 24/02/2013, count:2 ,day: 25/02/2013, count:1
。结果应该在一天中排序,因此23rd是第24个是第二个,第25个是第三个。有大量的条目大约100万。
答案 0 :(得分:0)
首先,你在那里有重复的ObjectIds,这是不好的数据。
最后,您应该能够使用以下聚合构建查询:(假设您使用的是mongodb 2.2 +)。
db.mytable.aggregate([ {$group : {_id:"$visited", total:{$sum:1}}}, {$sort:{visited:-1}}])
答案 1 :(得分:0)
/**
* group by day
* @link https://gist.github.com/phnessu4/5636642
* @param query document {key1:123,key2:456}
*/
var count_by_day = function(query){
return db.action.group(
{
keyf: function(doc) {
var date = new Date(doc.time);
var dateKey = (date.getMonth()+1)+"/"+date.getDate()+"/"+date.getFullYear();
return {'date': dateKey};
},
cond:query,
initial: {count:0},
reduce: function(obj, prev) {
prev.count++;
}
});
}
count_by_day({this:'is',the:'query'})
试试这个。我不确定你的病情细节。你需要自己编写查询。
希望这可以帮到你。