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

サブドキュメント内のすべてのキーの合計値

    mongodb集約フレームワークには、ドキュメント内のキーを調べたり操作したりできるデータとして扱う方法はありません。回避策は、ここでキーとして使用しているもの(果物の種類や店舗名など)を次のような値に変換することです。

    {
        "_id" : "doc1",
        "stores":[
            {
                // store name is a value
                "name":"store_A",
                "inventory": [
                {
                    // so is fruit type
                    "type" : "apple",
                    "count" : 50
                },
                {
                    "type" : "orange",
                    "count" : 20
                }
                ]
            },
            {
                "name": "store_B",
                "inventory": [
                {
                    "type" : "orange",
                    "count" : 15
                }
                ]
            }
        ]
    }
    

    これにより、これらのデータをより簡単に集計して操作できます。

    db.coll.aggregate([
        // split documents by store name
        {$unwind:"$stores"},
        // split documents further by fruit type
        {$unwind:"$stores.inventory"},
        // group documents together by store/fruit type, count quantities of fruit
        {$group:{"_id":{"store":"$stores.name", "fruit":"$stores.inventory.type"},
                 "count":{$sum:"$stores.inventory.count"}}},
        // reformat the data to look more like your specification
        {$project:{
            "store":"$_id.store",
            "fruit":"$_id.fruit",
            "_id":0,
            "count":1}}])
    

    出力は次のようになります:

    {
        "result" : [
            {
                "count" : 15,
                "store" : "store_B",
                "fruit" : "apple"
            },
            {
                "count" : 15,
                "store" : "store_B",
                "fruit" : "orange"
            },
            {
                "count" : 30,
                "store" : "store_A",
                "fruit" : "orange"
            },
            {
                "count" : 50,
                "store" : "store_A",
                "fruit" : "apple"
            }
        ],
        "ok" : 1
    }
    



    1. クエリオブジェクトを使用してSpringDataMongoDBの2つのフィールドを比較する方法

    2. MongoDBでグループ化する方法

    3. Mongodb c#ドライバーとISODate

    4. MongoDBを使用したDjango