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

MongoDBフレームワークを使用してキーマップをベクトルに変換します

    @Philippが彼のコメントで正しく言及したように

    ただし、キーが何であるかを事前に知っている場合は、集計演算子 $literal $addToSet および $setUnion 望ましい結果を得るために。集約パイプラインは次のようになります:

    db.collection.aggregate([
        {
            "$project": {
    
                "attrs.A1.key": { "$literal": "A1" },
                "attrs.A1.type": "$attrs.A1.type",
                "attrs.A1.value": "$attrs.A1.value",
                "attrs.A2.key": { "$literal": "A2" },
                "attrs.A2.type": "$attrs.A2.type",
                "attrs.A2.value": "$attrs.A2.value"
            }
        },
        {
            "$group": {
                "_id": "$_id",
                "A1": { "$addToSet": "$attrs.A1" },
                "A2": { "$addToSet": "$attrs.A2" }
            }
        },
        {
            "$project": {
                "attrs": {
                    "$setUnion": [ "$A1", "$A2" ]
                }
            }
        }
    ])
    

    結果

    /* 0 */
    {
        "result" : [ 
            {
                "_id" : ObjectId("55361320180e849972938fea"),
                "attrs" : [ 
                    {
                        "type" : "T1",
                        "value" : "13",
                        "key" : "A1"
                    }, 
                    {
                        "type" : "T2",
                        "value" : "14",
                        "key" : "A2"
                    }
                ]
            }
        ],
        "ok" : 1
    }
    


    1. DockerからRedisに接続できません

    2. AmazonAWSでの安全なMongoDBデプロイメント

    3. ValueError:<解凍するには値が多すぎます>

    4. 異なる埋め込み構造を同じ名前で投影します