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での1日のページビュー数を取得します。

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 queryを試しましたが、時間でソートされませんでした。動作する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 に答える