MongoDB - 有没有办法在不覆盖 existing/unreferenced key/values 的情况下对散列执行 $set?

MongoDB - Is there a way to perform $set on a hash without overwriting existing/unreferenced key/values?

假设我有这样一个文档:

{
  _id: "12345",
  hash_field: {
    "foo": "bar"
  }
}

并且在不知道该文档的 hash_field 的值的情况下,我需要在保持当前不变的情况下向其添加更多的 key/value 对。我正在寻找一种无需擦除现有数据且无需进行多次嵌套更新的方法

db.myCollection.updateOne({_id:"12345"}, 
                          {'$set': { 
                            hash_field: { 
                              "key1": "value1", 
                              "key2": "value2"
                            }
                          }
                          })

以上将擦除{"foo":"bar"}

我知道我可以使用 '$set': {"hash_field.key1": "value1"}'$set': {"hash_field.key2": "value2"} 进行两次单独的 $set 调用,但我正在寻找一种在一次 mongo 更新中完成此操作的方法。可能吗?

使用$mergeObjects.

db.collection.update({
  _id: "12345"
},
[
  {
    "$set": {
      hash_field: {
        $mergeObjects: [
          "$hash_field",
          {
            "key1": "value1",
            "key2": "value2"
          }
        ]
      }
    }
  }
])

mongoplayground