0

我在 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结果应该按天排序,所以第 23 天是第 24 天是第 24 天,第 25 天是第 3 天。有很多条目在 100 万左右。

4

2 回答 2

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'})

尝试这个。我不确定你的情况细节。您需要自己编写查询。
希望这可以帮到你。

于 2013-05-23T15:02:17.550 回答
0

首先,您在那里有重复的 ObjectId,因此这是错误的数据。

最后,您应该能够使用类似这样的聚合来构建查询:(假设您使用的是 mongodb 2.2 +)。

db.mytable.aggregate([ {$group : {_id:"$visited", total:{$sum:1}}}, {$sort:{visited:-1}}])
于 2013-03-25T11:20:30.363 回答