【发布时间】:2019-06-02 20:49:42
【问题描述】:
我想更新一个包含 MongoDB 中对象的文档。 由于更新的对象是用户提供的,我不知道他到底要改变什么。
例如我在用户集合中有这个文档:
{
_id: 1,
date: new Date(),
info: {
first_name: "a",
last_name: "b",
phone: "c"
}
}
用户可以编辑名字和姓氏,但不能编辑电话。
这是req.body(我从用户那里收到的输入):
{
info: {
first_name: "aa"
}
}
现在为了只更新“info.first_name”并保留存储在 info ojbect 中的其他字段,我必须像这样设置更新查询:
db.users.update({}, {$set: {"info.first_name": req.body.info.first_name}}, cb);
但是输入可以是动态的和可变的。 我不知道是否总是更新名字,它可以是姓氏,甚至可以是其他子对象,例如地址:“info.address.city”(例如)
因此,我会这样处理这些更新:
$set: req.body
就是这样。它有效,但我对此有疑问。 它替换了整个信息对象,并且不保留存储在其中的其他密钥 - 电话被删除,姓氏被删除。
有没有办法告诉 MongoDB 不要替换整个对象,而只是更新提到的那些键?
【问题讨论】: