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

mongodbで、対応する週、月、年ごとに、日、週、月ごとにデータを集計する方法

    クエリに関連するすべての日時について、日付フィールドから値を$projectする必要があります-ここにマニュアル

    この場合、集計フレームワークが役立ちます。以下の基本的なクエリを参照してください。これには、日次および週次の重み集計が含まれているため、このクエリを他の期間に変換したり、期間ごとに1つのクエリを使用したりできます。

    db.timing.aggregate([{
            $project : {
                year : {
                    $year : "$date"
                },
                month : {
                    $month : "$date"
                },
                week : {
                    $week : "$date"
                },
                day : {
                    $dayOfWeek : "$date"
                },
                _id : 1,
                weight : 1
            }
        }, {
            $group : {
                _id : {
                    year : "$year",
                    month : "$month",
                    week : "$week",
                    day : "$day"
                },
                totalWeightDaily : {
                    $sum : "$weight"
                }
            }
        },
        {
            $group : {
    
                _id : {
                    year : "$_id.year",
                    month : "$_id.month",
                    week : "$_id.week"
                },
                totalWeightWeekly : {
                    $sum : "$totalWeightDaily"
                },
                totalWeightDay : {
                    $push : {
                        totalWeightDay : "$totalWeightDaily",
                        dayOfWeek : "$_id.day"
                    }
                }
            }
        }, {
            $match : {
                "_id.month" : 3
            }
        }
    ])
    

    ダミーデータの3か月目の結果の例を以下に示します。

    {
        "_id" : {
            "year" : 2016,
            "month" : 3,
            "week" : 10
        },
        "totalWeightWeekly" : 600,
        "totalWeightDay" : [ 
            {
                "totalWeightDay" : 200,
                "dayOfWeek" : 7
            }, 
            {
                "totalWeightDay" : 400,
                "dayOfWeek" : 6
            }
        ]
    }
    {
        "_id" : {
            "year" : 2016,
            "month" : 3,
            "week" : 9
        },
        "totalWeightWeekly" : 1000,
        "totalWeightDay" : [ 
            {
                "totalWeightDay" : 200,
                "dayOfWeek" : 4
            }, 
            {
                "totalWeightDay" : 600,
                "dayOfWeek" : 3
            }, 
            {
                "totalWeightDay" : 200,
                "dayOfWeek" : 7
            }
        ]
    }
    {
        "_id" : {
            "year" : 2016,
            "month" : 3,
            "week" : 12
        },
        "totalWeightWeekly" : 400,
        "totalWeightDay" : [ 
            {
                "totalWeightDay" : 200,
                "dayOfWeek" : 7
            }, 
            {
                "totalWeightDay" : 200,
                "dayOfWeek" : 2
            }
        ]
    }
    {
        "_id" : {
            "year" : 2016,
            "month" : 3,
            "week" : 13
        },
        "totalWeightWeekly" : 200,
        "totalWeightDay" : [ 
            {
                "totalWeightDay" : 200,
                "dayOfWeek" : 3
            }
        ]
    }
    

    必要に応じて形状を形成するには、$projectフェーズを使用できます

       {$project:{
                    _id:0,
                    "year" : "$_id.year", //this could be ommited but use $match to avoid sum of other years
                    "month" : "$_id.month",  //this could be ommited but use $match to avoid sum of other months
                    "week" :"$_id.week",                
                    totalWeightWeekly:1
    
                    }}
    
    {
        "totalWeightWeekly" : 600,
        "year" : 2016,
        "month" : 3,
        "week" : 10
    }
    

    コメントは大歓迎です!




    1. Djangoセッション

    2. レスキューワーカーによってキューに入れられたジョブを破棄するにはどうすればよいですか?

    3. MongoEngineスライシングクエリセット(djangoを使用したmongodb)

    4. 信頼性のあるRedisPub/ Sub