2017-12-14 22 views
0

MongoDBドキュメントの2つのオブジェクトを、キーがマージされた単一のオブジェクトにグループ化しようとしています。2つのオブジェクトを1つのオブジェクトにグループ化してキーをマージする

{ 
    "_id": ObjectId("..."), 
    "object_a": { "keyA": 1, "keyB": "valueB" } 
    "object_b": { "keyC": 2 } 
} 

そして、何私が取得しようとすると、以下の通りである:私は何を持っていることである

{ 
    "_id": ObjectId("..."), 
    "object_a": { "keyA": 1, "keyB": "valueB", "keyC": 2 } 
} 
  • 私はキーの競合
  • 私は鍵を知らないがないことを主張することができます名前は事前に

私は$addFieldsオペレータで試しましたが、これはネストしますobject_b内部e object_a、キーをマージしないでください。言い換えれば

{ 
    "$addFields": 
    { 
    "object_a": "$object_b" 
    } 
} 

、私は$setUnionのためではなく、オブジェクトを探しています。

答えて

1

012には$mergeObjectsを使用できます。

{"$addFields":{"object_a": {"$mergeObjects": ["$object_a", "$object_b"]}}} 

3.4のためには、キーをマージする$arrayToObject$objectToArrayを使用することができます。

{"$addFields":{"object_a": { "$arrayToObject": {"$setUnion": [{"$objectToArray": "$object_a"},{"$objectToArray": "$object_b"}]}}}} 
+0

完璧な答え。 '$ ifNull'を使うと、null処理のためにMongoDB 3.4で' $ mergeObjects'操作を完全に再現できます。ありがとうございました。 – kagmole

関連する問題