猫鼬只更新不为空的字段?
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')
方法:
如果我想更新已经创建的 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')
方法: