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

Posted

技术标签:

【中文标题】猫鼬只更新不为空的字段?【英文标题】:mongoose update only not nulled fields? 【发布时间】:2021-12-10 16:36:46 【问题描述】:

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

示例-假设我在此处创建一个集合 User-

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

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

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

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

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

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

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

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

【问题讨论】:

【参考方案1】:

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

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


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

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

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

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

【讨论】:

我想我能理解。非常感谢。

以上是关于猫鼬只更新不为空的字段?的主要内容,如果未能解决你的问题,请参考以下文章

sql查询不为空的字段

选择字段不为空的数据

查找数组字段不为空的 MongoDB 记录

查找数组字段不为空的 MongoDB 记录

查找数组字段不为空的 MongoDB 记录

查找数组字段不为空的 MongoDB 记录