【问题标题】:group by day in mongodb and nodejs在 mongodb 和 nodejs 中按天分组
【发布时间】:2013-03-25 04:58:31
【问题描述】:

我在 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 个是第二个,第 25 个是第三个。 100万左右的条目很多。

【问题讨论】:

    标签: node.js mongodb date group-by


    【解决方案1】:

    首先,你有重复的 ObjectIds,所以这是坏数据。

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

    db.mytable.aggregate([ {$group : {_id:"$visited", total:{$sum:1}}}, {$sort:{visited:-1}}])
    

    【讨论】:

    • 我已经复制粘贴了示例数据,所以没有问题。但如果我运行上述查询,我​​会得到输出为 { "_id" : ISODate("2013-03-01T11:45:10Z"), "total" : 2 }, { "_id" : ISODate("2013-03- 06T13:11:37Z"), "total" : 1 }, { "_id" : ISODate("2013-03-01T05:56:26Z"), "total" : 1 }, { "_id" : ISODate(" 2013-03-01T11:55:47Z"),“总计”:1 },{“_id”:ISODate(“2013-03-06T12:32:40Z”),“总计”:2 }。但我需要按天分组,所以一天只有一行,正如你在输出中看到的那样,3 月 1 日有 2 个条目
    【解决方案2】:
    /**
     * 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'})
    

    试试这个。我不确定你的情况细节。您需要自己编写查询。
    希望对您有所帮助。

    【讨论】:

      猜你喜欢
      • 2019-05-03
      • 1970-01-01
      • 2019-08-25
      • 2020-05-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-08
      相关资源
      最近更新 更多