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

イベントをカウントし、集計中に文字列リテラルを挿入します

    次のような集計でこれを行うことができます:

    db.user.aggregate([
       {
          $match:{
             $and:[
                {
                   timestamp:{
                      $gte: ISODate("2016-10-12T00:00:00.000Z")
                   }
                },
                {
                   timestamp:{
                      $lt: ISODate("2016-10-13T00:00:00.000Z")
                   }
                }
             ]
          }
       },
       {
          $group:{
             _id:"$userId",
             timestamp:{
                $first:"$timestamp"
             },
             send_message:{
                $sum:{
                   $cond:[
                      {
                         $eq:[
                            "$event_type",
                            "send_message"
                         ]
                      },
                      1,
                      0
                   ]
                }
             },
             clicked_cancel:{
                $sum:{
                   $cond:[
                      {
                         $eq:[
                            "$event_type",
                            "clicked_cancel"
                         ]
                      },
                      1,
                      0
                   ]
                }
             },
             clicked_ok:{
                $sum:{
                   $cond:[
                      {
                         $eq:[
                            "$event_type",
                            "clicked_ok"
                         ]
                      },
                      1,
                      0
                   ]
                }
             }
          }
       },
       {
          $project:{
             date:{
                $dateToString:{
                   format:"%Y-%m-%d",
                   date:"$timestamp"
                }
             },
             userId:1,
             clicked_cancel:1,
             send_message:1,
             clicked_ok:1
          }
       }
    ])
    

    説明:

    $ matchに特定の日のドキュメントのみを保持する ステージ

    ユーザーIDでドキュメントをグループ化し、 $ group内の各イベントの発生をカウントします ステージ

    最後に、タイムスタンプフィールドを yyyy_MM-ddにフォーマットします $ projectの形式 ステージ

    指定したデータの場合、これは

    を出力します
    {
       "_id":"123123123",
       "send_message":0,
       "clicked_cancel":1,
       "clicked_ok":1,
       "date":"2016-10-12"
    }
    


    1. MongoDbのグローバル自動インクリメントフィールド

    2. 日付別のMongoDb集計グループ

    3. 1つのリクエストで配列オブジェクトの複数のフィールドを更新するにはどうすればよいですか?

    4. Django adminとMongoDB、可能ですか?