只在mongoose中使用updateOne $set更新特定的值



我只想在下面的Mongoose模型中更新todo中的两个值

const userSchema = new mongoose.Schema({
name: String,
email: String,
phone: Number,
points: Number,
todo: {
}
})

todo实际上包含11个值,我只想一次更新从前端获取的2个值

let {
t,
i
} = req.body.delitem;
await User.updateOne({
username: req.body.user
}, {
$set: {
todo: {
[t]: "",
[i]: ""
}
}
})

但是发生的事情是这两个字段被设置为空白字符串,但其余字段也更改为NULL,而我希望其他字段保持不变。

使用点表示法:

await User.updateOne({username:req.body.user},
{
"$set": {
"todo.t": "",
"todo.i": ""
}
})

例子

如果你在$set中使用一个对象,你就是在告诉mongo用新的对象替换这个对象。

我相信你的问题是你正在使用$set并传递一个完整的对象,它覆盖了你的ti字段的整个todo,你已经强制要求其他字段。

如果你在mongo中看到$set的文档,你可以更新子对象中的特定字段。下面的代码片段应该更合适。

let {t,i} = req.body.delitem;
await User.updateOne({username:req.body.user}, {
$set: { 
"todo.t": "",
"todo.i": ""
}
})

最新更新