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 更新中完成此操作的方法。可能吗?
db.collection.update({
_id: "12345"
},
[
{
"$set": {
hash_field: {
$mergeObjects: [
"$hash_field",
{
"key1": "value1",
"key2": "value2"
}
]
}
}
}
])
假设我有这样一个文档:
{
_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 更新中完成此操作的方法。可能吗?
db.collection.update({
_id: "12345"
},
[
{
"$set": {
hash_field: {
$mergeObjects: [
"$hash_field",
{
"key1": "value1",
"key2": "value2"
}
]
}
}
}
])