未定义的猫鼬 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。