猫鼬只更新不为空的字段?

mongoose update only not nulled fields?

如果我想更新已经创建的 collection,我只想保存而不是空字段。

示例-假设我在这里创建一个collection用户-

name: "Siam Ahnaf"
password: "12345678"
role: "user"

这是创建的collection。然后我想更新它。为了更新,我从前端应用程序中得到了这个 object 这样的-

{name: "",
password: "98765432"
role: "Admin"}

在这里我可以看到我从前端应用程序获得的名称是空的。当我用

更新它时
User.findByIdAndUpdate(req.user._id, {...input})

它用这个空名称更新 collection。更新后我的collection是这样的-

name: ""
password: "98765432"
role: "Admin"

但我想当名字为空时,它不会保存这个空值。它保持以前的值。我该怎么做?

您可以在保存之前从对象中删除空字符串属性。

const obj = {
 name: "",
 password: "98765432",
 role: "Admin"
}

Object.keys(obj).forEach((k) => obj[k] == '' && delete obj[k]);

User.findByIdAndUpdate(req.user._id, obj)

删除空字符串属性函数取自

或者像这样使用猫鼬的.pre('save')方法: