我正在尝试根据用户输入更新模式值。
我的schema是:
({
name: {
type: String,
required: true,
},
color: {
type: String,
},
createdAt: {
type: Date,
default: Date.now,
},
});
name
字段是必需的,但color
字段是可选的。假设用户创建了一个文档:
{
"name": "Blue",
"color": "#20387d"
}
然后,他可以编辑没有提供color
值的同一文档:
{
"name": "Blue"
}
我的更新代码是:
const { name, color} = req.body;
const document = await Model.findOneAndUpdate(
{
_id: req.params.id,
},
{ $set: { name, color }},
{ new: true }
);
这应该会将我的MongoDB中的color
值更新为undefined
。但是,color
保持与最初提供的相同,而name
更新。我希望color
更改为undefined
,如果它不是由用户提供的。我该怎么做?
2条答案
按热度按时间q0qdq0h21#
由于您不想使用$unset或将该值设置为其他值,因此只剩下一种方法。
使用
findById
/findOne
获取该文档,然后修改其内容,然后保存。上面的代码工作,因为mongoose检测变化。
oxcyiej72#
正如@bogdanoff在注解中指出的那样,您可以将该值设置为
null
,而不是undefined
。