如果我想更新已经创建的集合,我只想保存非空字段。
示例-假设我在这里创建一个集合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