猫鼬只更新不为空的字段?
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
【讨论】:
我想我能理解。非常感谢。以上是关于猫鼬只更新不为空的字段?的主要内容,如果未能解决你的问题,请参考以下文章