我一直在.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"}}