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

配列値の合計を使用したMongoDB集約

    アグリゲーションフレームワークでニーズを達成するために、最初のパイプラインステージは $matchになります ドキュメントを乗客配列内のユーザーと一致させる問題の乗客に対する操作と、それに続く $unwind 前の操作の入力ドキュメントからpassengers配列を分解して、各要素のドキュメントを出力する操作。別の$match 分解された配列に対する操作は、前のドキュメントストリームをさらにフィルタリングして、一致するドキュメントのみが変更されずに次のパイプラインステージに渡されるようにします。次のパイプラインステージでは、 $projectで必須フィールドが投影されます。 オペレーター。つまり、基本的にuser3の集計パイプラインです。 次のようになります:

    db.collection.aggregate([
         {
            "$match": {
                "passengers.user": "user3"
            }
         },
         {
             "$unwind": "$passengers"
         },
         {
            "$match": {
                "passengers.user": "user3"
            }
         },
         {
             "$project": {
                 "_id": 0,
                "driver": "$driver",
                "times": "$passengers.times"
            }
         }
    ])
    

    結果

    /* 0 */
    {
        "result" : [ 
            {
                "driver" : "user1",
                "times" : 3
            }, 
            {
                "driver" : "user2",
                "times" : 2
            }
        ],
        "ok" : 1
    }
    

    更新

    日付の異なるドライバーで重複をグループ化するには、前述のように、 $groupを実行できます。 最後の$projectの直前の操作 $sumを使用して総乗客時間を計算するパイプラインステージ 演算子:

    db.collection.aggregate([
         {
            "$match": {
                "passengers.user": "user3"
            }
         },
         {
             "$unwind": "$passengers"
         },
         {
            "$match": {
                "passengers.user": "user3"
            }
         },
         {
             "$group": {
                 "_id": "$driver", 
                 "total": {
                     "$sum": "$passengers.times"
                 }
             }
         },
         {
             "$project": {
                "_id": 0,
                "driver": "$_id",
                "total": 1
            }
         }
    ])
    

    結果

    /* 0 */
    {
        "result" : [ 
            {
                "total" : 2,
                "driver" : "user2"
            }, 
            {
                "total" : 3,
                "driver" : "user1"
            }
        ],
        "ok" : 1
    }
    



    1. アプリケーションでマングースが発火するすべてのクエリをログに記録する

    2. Redisでメモリ使用量を分析および最適化する方法

    3. WiredTigerとインプレースアップデート

    4. MongoDBのパフォーマンスに関するチートシート