Mongoose findOneAndUpdate 未定义设置为 null

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 的行为?蒙戈数据库?(或猫鼬?)

预先感谢,埃泰。

Jav*_*lla 9

是的,这是因为该方法findOneAndUpdate有一个属性选项,可以避免对象中未定义的变量并默认设置空值。要解决此问题,您只需传递该选项,"omitUndefined: true"因为默认情况下为 false。应用代码示例:

\n
    await this.yourModel.findByIdAndUpdate(\n            object._id,\n            object,\n            {\n              new: true,\n              omitUndefined: true\n            },\n          )\n
Run Code Online (Sandbox Code Playgroud)\n

该解决方案仅适用于 Mongoose。

\n