sql >> データベース >  >> NoSQL >> MongoDB

mongodbの日付でグループ化

    Mongoアグリゲーションフレームワークを使用した新しい回答

    この質問に答えた後、10genは集約フレームワークを備えたMongodbバージョン2.2をリリースしました。これは、この種のクエリを実行するためのより良い方法です。日付でグループ化し、保存される値がタイムスタンプであるため、このクエリは少し難しいです。そのため、タイムスタンプを一致する日付に変換するために何かを行う必要があります。例として、適切なカウントを取得するクエリを作成します。

    db.col.aggregate(
       { $group: { _id: { $dayOfYear: "$date"},
                   click: { $sum: 1 } } }
       )
    

    これにより、次のような結果が返されます:

    [
        {
            "_id" : 144,
            "click" : 165
        },
        {
            "_id" : 275,
            "click" : 12
        }
    ]
    

    $matchを使用する必要があります クエリを関心のある日付範囲と$projectに制限します _idの名前を変更します date 。年の日を日付に戻す方法は、読者の練習問題として残されています。 :-)

    10genには、ブックマークする価値のある便利なSQLからMongoAggregationへの変換チャートがあります。日付集計演算子に関する特定の記事もあります。

    少し凝ったものにすると、次を使用できます:

    db.col.aggregate([
      { $group: {
          _id: {
            $add: [
             { $dayOfYear: "$date"}, 
             { $multiply: 
               [400, {$year: "$date"}]
             }
          ]},   
          click: { $sum: 1 },
          first: {$min: "$date"}
        }
      },
      { $sort: {_id: -1} },
      { $limit: 15 },
      { $project: { date: "$first", click: 1, _id: 0} }
    ])
    

    これにより、最新の15日間が取得され、dateで毎日の日時が返されます。 分野。例:

    [
        {
            "click" : 431,
            "date" : ISODate("2013-05-11T02:33:45.526Z")
        },
        {
            "click" : 702,
            "date" : ISODate("2013-05-08T02:11:00.503Z")
        },
                ...
        {
            "click" : 814,
            "date" : ISODate("2013-04-25T00:41:45.046Z")
        }
    ]
    


    1. Redisから値を取得してNGiNXの変数に入れるにはどうすればよいですか?

    2. MongoDb c#ドライバーは、フィールド値で配列内のアイテムを検索します

    3. ボタンクリックでメテオページを更新

    4. MongoDB $ exp