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