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

配列をn個の属性を持つドキュメントのマップに変換するクエリ

    MongoDB 3.4.4以降では、 $arrayToObject 配列を単一のドキュメントに変換する演算子。配列は、 kの2つのフィールドを含むドキュメントのリストである必要があります。 およびv ここで:

    したがって、最初にitemsを変換するパイプラインを作成する必要があります からの配列

    "items":[  
        {  
          "id":"AB-02",
          "qty":2
        },
        {  
          "id":"AB-03",
          "qty":0
        },
        {  
          "id":"AB-03",
          "qty":9
        }
    ]
    

    "items" : [ 
        {
            "k" : "AB-02",
            "v" : {
                "id" : "AB-02",
                "qty" : 2.0
            }
        }, 
        {
            "k" : "AB-03",
            "v" : {
                "id" : "AB-03",
                "qty" : 0.0
            }
        }, 
        {
            "k" : "AB-03",
            "v" : {
                "id" : "AB-03",
                "qty" : 9.0
            }
        }
    ]
    

    $map 式でそれを正しく行う

    "$map": {
        "input": "$items",
        "as": "item",
        "in": {
            "k": "$$item.id",
            "v": "$$item"
        }                            
    }
    

    したがって、最終的なパイプラインは、上記のすべての演算子を $addFields として:

    db.collection.aggregate([
        {
            "$addFields": {
                "items": {
                    "$arrayToObject": {
                        "$map": {
                            "input": "$items",
                            "as": "item",
                            "in": {
                                "k": "$$item.id",
                                "v": "$$item"
                            }                            
                        }
                    }
                }
            }
        }
    ])
    



    1. データアクセス層のデザインパターン

    2. 配列のmongodbクエリサブセット

    3. アンワインドアグリゲーションを元に戻す方法は?

    4. Mongodbからデータを取得するにはどうすればよいですか