【问题标题】: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"

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

【问题讨论】:

    标签: database mongodb mongoose graphql


    【解决方案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://stackoverflow.com/a/38340730/9095807

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

    【讨论】:

    • 我想我能理解。非常感谢。
    猜你喜欢
    • 2021-04-17
    • 2019-09-14
    • 2017-02-10
    • 1970-01-01
    • 2018-08-26
    • 1970-01-01
    • 1970-01-01
    • 2022-11-28
    • 2020-08-26
    相关资源
    最近更新 更多