【问题标题】:Get count for each day in mongodb using aggregate or map reduce [duplicate]使用聚合或映射减少在mongodb中获取每天的计数[重复]
【发布时间】:2013-03-25 05:31:13
【问题描述】:

如何将以下 mysql 查询转换为 mongodb 查询:SELECT count(*) as count , DATE_FORMAT( timestamp, '%d-%c-%Y' ) as day, timestamp as tm FROM visits WHERE 1 GROUP BY day ORDER BY tm。我想在 nodejs 上使用它,所以我使用的是本机 mongodb。

在 mongodb 中获取每天的浏览量,其中每个浏览量与时间戳一起存储。

【问题讨论】:

    标签: mysql mongodb


    【解决方案1】:

    您的问题缺乏您的努力,我们很少只是“给”人们这样的答案,但是,这一次:

    注意:您还不能操纵日期以将它们转换为不同的格式,而无需自己进行一些手动工作来挑选部分并重新加入它们。因此,我省略了您所做的日期格式,只是将其用作对象。

    db.visits.aggregate([
        {
            $project: {
                date: {day: {$dayOfMonth: '$timestamp'}, month: {$month: '$timestamp'}, year: {$year: '$timestamp'}},
                //day: {concat: [date.day,date.mont,date.year]}
            }
        },
        {$group: {_id: '$date', tm: '$timestamp', count: {$sum:1}}}
    ])
    

    【讨论】:

    • 嘿,恭喜你获得了 10K+ 次重复 :)
    • @SushantGupta 谢谢 :)
    • 我得到错误:MongoError:异常:组聚合字段'tm'必须定义为对象内的表达式
    • @peter 很奇怪我不明白
    • 下面的查询对我来说似乎很完美: db.visits.aggregate( { $project: { day: { years: {$year: '$timestamp'}, months: {$month: '$timestamp'}, 天数: {$dayOfMonth: '$timestamp'}, }, }}, { $group: { _id: { day: '$day' },计数:{ $sum: 1} }}, { $sort:{_id:1}});从link得到答案
    【解决方案2】:

    我找到了一个使用 mapreduce 的有效 mongodb 查询,它给我的输出时间是 unix 时间,而不是我在问题中提到的格式。但这是正确排序时间的查询。我曾尝试过 mongo group 查询,但它没有按时间排序。工作的 mongo 查询是:

    db.visits.mapReduce(
    function(){
      day = Date.UTC(this.timestamp.getFullYear(), this.timestamp.getMonth(), this.timestamp.getDate());
    
      emit({day: day}, {count: 1});
    }, 
    function(key, values) {
      var count = 0;
    
      values.forEach(function(v) {
        count += v['count'];
      });
    
      return {count: count};
    },
                 {
                  out : {inline:1},
                  sort:{_id:1}
                 }
    );
    

    【讨论】:

      猜你喜欢
      • 2014-02-01
      • 1970-01-01
      • 2012-11-11
      • 1970-01-01
      • 2011-12-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-16
      相关资源
      最近更新 更多