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

mongodbで複数の列と複数の値でグループ化する方法

    アグリゲーションパイプライン内で、MongoDBバージョン3.6以降では、 $ arrayToObject 演算子と $ replaceRoot パイプラインを使用して、目的のJSON出力を取得します。これは、呼び出しフィールドの値が不明な場合にうまく機能します。

    次の集約パイプラインを実行する必要があります:

    db.collection.aggregate([
        { "$group": {
            "_id": { 
                "name": "$name",
                "call": "$call"
            },
            "count": { "$sum": 1 }
        } },
        { "$group": {
            "_id": "$_id.name",
            "counts": {
                "$push": {
                    "k": "$_id.call",
                    "v": "$count"
                }
            },
            "nameCount": { "$sum": 1 }
        } },
        { "$replaceRoot": { 
            "newRoot": { 
                "$mergeObjects": [ 
                    { "$arrayToObject": "$counts" }, 
                    "$$ROOT" 
                 ] 
            } 
        } },
        { "$project": { "counts": 0 } }
    ])
    

    上記の演算子をサポートしていない以前のバージョンのMongoDBの場合は、 $ cond $group<の演算子/ code> 既知のcallに基づいてカウントを評価するステージ 値、次のようなもの:

    db.collection.aggregate([
        { "$group": {
            "_id": "$name",
            "nameCount": { "$sum": 1 },
            "Success Call": {
                "$sum": {
                    "$cond": [ { "$eq": [ "$call",  "Success Call" ] }, 1, 0]
                }
            },
            "Repeat Call": {
                "$sum": {
                    "$cond": [ { "$eq": [ "$call",  "Repeat Call" ] }, 1, 0]
                }
            },
            "Unsuccess Call": {
                "$sum": {
                    "$cond": [ { "$eq": [ "$call",  "Unsuccess Call" ] }, 1, 0]
                }
            }
        } },
        { "$project": {
            "_id": 0, 
            "name": "$_id",
            "nameCount": 1,
            "Success Call":1,
            "Unsuccess Call":1,
            "Repeat Call":1               
        } }
    ])
    



    1. Mongodb-実行中のmongoデータベースとmongodデータベースの違い

    2. プライマリ-セカンダリMongodbセットで、誤ってセカンダリに書き込んだ場合、プライマリに反映され、プライマリにルーティングされます

    3. MongoDB-集計を使用して配列をアンワインドし、重複を削除します

    4. MongoDB:それぞれの異なる値がいくつあるかを数えますか?