如何在 NodeJS 猫鼬中仅更新一个对象字段



我只会更改角色字段和状态字段book_mode book_mode但是在 findOneAndUpdate(( 执行后,角色和状态patrol_mode字段消失了。我想保留该字段。我该怎么办?

var userSchema = new Schema({
user_id: String,
name: String,
avatar: String,
role: {
book_mode: Number,
patrol_mode: Number
},
status: {
book_mode: Number,
patrol_mode: Number
},
created_at: Number,
updated_at: Number
}, {collection: 'users'});
var updateData = {
status: {
book_mode: APPROVED
},
role: {
book_mode: req.body.role
}
}
User.findOneAndUpdate({
_id: mongoose.Types.ObjectId(req.body._id)
},
{$set: updateData},
function(err, doc){
if(err){
resData.message = 'failed';
resData.code = 501;
resData.flag = false;
resData.data = err;
res.send(resData);
return;
}
resData.data = doc;
resData.message = 'success';
resData.code = 200;
resData.flag = true
res.send(resData);
return;
});

因为您要重新分配整个父对象以仅包含book_mood所以您可以使用点表示法来访问特定字段。

updateData = {
"status.book_mode":  APPROVED,
"role.book_mode":  req.body.rol
}

也就是说,如果 APPROVED 和 req.body.rol 包含book_mood字符串,如果它包含一个对象,那么您必须将其更改为

updateData = {
"status.book_mode":  APPROVED.book_mode,
"role.book_mode":  req.body.rol.book_mode
}

最新更新