必须先$pull再$addtoSet吗?
fidding通过各种百度谷歌,终于找到了解决方案,在此为了其他跟我一样困惑的同道中人,应慷慨解囊!
好了,废话不多说。
首先我的数据结构
var userSchema = new Schema({
name : String,
avatar: String,
mobile_phone : Number,
email : String,
wx_id : String,
password : String,
nickname: String,
birth_day: Number,
birth_month : Number,
birth_year : Number,
message: [{
sender: {type: ObjectId, ref:'users'},
title: String,
content: String,
sort: Number,
read: {type: Number, default: 0}, date: Date
}]
});
在此我想将message中的read值设置为1(默认是0)
//根据id查找user
User.findById(id, function(err, user){
//遍历user.message,根据msg_id找到想要修改的message
for(var i = 0; i < user.message.length; i++){
//如果找到了
if(user.message[i]._id == msg_id){
//将read修改为1
user.message[i].read = 1;
//混合类型因为没有特定约束,
//因此可以任意修改,一旦修改了原型,
//则必须调用markModified()
//传入read,表示该属性类型发生变化
user.markModified('read');
//保存
user.save(function(err){
res.json({status: 1, error: '修改成功!'});
return;
});
}
}
})
就这样实现了nodejs中mongoose更新Array数据,其通俗的来说就是拿到所有数据,然后修改想修改的数据,最后调用save方法,而不用pull后再set了。
至于删除$pull与添加$addToSet就是小菜一碟了,我也就不多说了。
好了。joining