我正在尝试将MongoDB文档中的2个对象组合成一个合并了键的对象。我所拥有的是:
{
"_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
嵌套在object_a
内,而不是合并键。
{
"$addFields":
{
"object_a": "$object_b"
}
}
换句话说,我正在寻找一个$setUnion
但是对象。
答案 0 :(得分:3)
您可以在3.6中使用$mergeObjects
。
{"$addFields":{"object_a": {"$mergeObjects": ["$object_a", "$object_b"]}}}
对于3.4,您可以使用$arrayToObject
和$objectToArray
来合并密钥。
{"$addFields":{"object_a": { "$arrayToObject": {"$setUnion": [{"$objectToArray": "$object_a"},{"$objectToArray": "$object_b"}]}}}}
答案 1 :(得分:0)
这是Mongo 3.4.4+的改进版本,可处理空值。它基于@Veeram提供的解决方案
function $mergeObjects(...items) {
return {
$arrayToObject: {
$setUnion: items.map(_ => (
{$filter: {input: {$objectToArray: _}, cond: {$ne: ["$$this.v", null]}}}
))
}
}
}