ET-*_*-CS 4 null undefined mongoose node.js findoneandupdate
我无法理解未定义和 null 的 findOneAndUpdate 。
创建对象时:
const user = new User({
_id: 1,
name: "foo",
address: undefined
});
user.save()
Run Code Online (Sandbox Code Playgroud)
它正在创建一个只有名称而没有地址的新文档:
{
name: "foo"
}
Run Code Online (Sandbox Code Playgroud)
如果我在 findOneAndUpdate 之后使用相同的逻辑:
findOneAndUpdate({_id: 1}, {
name: "bar",
address: undefined
});
Run Code Online (Sandbox Code Playgroud)
数据库中的文档现在将包含一个nullfor 地址:
{
name: "bar",
address: null,
}
Run Code Online (Sandbox Code Playgroud)
我不明白为什么。
我希望当我为其设置一个值时undefined应该删除当前项目,因此,如果我有一个带有 的文档address: "somewhere",或者甚至根本没有address,我希望该设置undefined应该删除它(或者如果不存在则不设置) ,而不是将其设置为 null。
这是我能以某种方式实现的吗?或者这是 findOneAndUpdate 的行为?蒙戈数据库?(或猫鼬?)
预先感谢,埃泰。
是的,这是因为该方法findOneAndUpdate有一个属性选项,可以避免对象中未定义的变量并默认设置空值。要解决此问题,您只需传递该选项,"omitUndefined: true"因为默认情况下为 false。应用代码示例:
await this.yourModel.findByIdAndUpdate(\n object._id,\n object,\n {\n new: true,\n omitUndefined: true\n },\n )\nRun Code Online (Sandbox Code Playgroud)\n该解决方案仅适用于 Mongoose。
\n