mongoose只更新不为空的字段?



如果我想更新已经创建的集合,我只想保存非空字段。

示例-假设我在这里创建一个集合User-

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

这是已创建的集合。然后我想更新它。为了更新,我从前端应用程序获取这个对象,像这样-

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

这里我可以看到name是空的,我从前端应用程序得到的。当我用

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

用这个空名称更新集合。更新后我的收藏是这样的-

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

但是我想当name为空时,它不会保存这个空值。它保持先前的值。我该怎么做呢?

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

const obj = {
name: "",
password: "98765432",
role: "Admin"
}
Object.keys(obj).forEach((k) => obj[k] == '' && delete obj[k]);
User.findByIdAndUpdate(req.user._id, obj)

删除空字符串属性函数取自https://stackoverflow.com/a/38340730/9095807

或者像这样使用猫鼬的.pre('save')方法:https://stackoverflow.com/a/59916058/9095807

相关内容

  • 没有找到相关文章

最新更新