MongoDB是否有办法在不删除更新数据中未包含的现有元素的情况下更新文档



我一直在.NET core和Node.js中使用MongoDB。 这个问题特定于我正在处理的节点项目,但我认为客户端语言与我的问题无关。

我有一个文档,其中包含以下名称和地址当前("add_current"(等元素:

{
"_id" : ObjectId("5d858718c1d9f856881dc9ce"),
...
"name": "John Doe",
"add_current" : 
{
"add1" : "456 Old Ave.",
"city" : "Stafford",
"state" : "VA",
"zip" : "23234"
},
...
}

有时我只是像这样更新子对象的某些部分:

const updateDocument2 = function (db, callback) {
const collection = db.collection('documents');
collection.update(
{ 
'_id': ObjectID("5d858718c1d9f856881dc9ce") 
},
{
$set: {
name: "John Doe Jr.",
add_current: {
add1: "123 New Street",
}
}
}, function (err, result) {
console.log("Updated the document");
callback(result);
});
}

当我执行上述$set时,我删除了城市、州和邮政编码字段。 我不想那样做。

我正在寻找在不删除其他字段(如 add_current.state(的情况下更新名称和 add_current.add1 的最有效方法。我意识到有一些方法可以通过多次触摸数据记录来做到这一点(.findOne(...)然后.update(...)(。 有没有办法通过一次.update(...)触摸来做到这一点?

您将add_current的值设置为{add1: "123 New Street"}

试试{$set:{"add_current.add1": "123 New Street"}}

最新更新