1

如何将以下 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 中每天的页面浏览量,其中每个页面浏览量与时间戳一起存储。

4

2 回答 2

7

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

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

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}}}
])
于 2013-03-25T09:48:10.387 回答
0

我找到了一个使用 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}
             }
);
于 2013-03-26T05:17:18.800 回答