必须先$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
TestModel.update({ 'user.email': 'xxxx@xxx.com' }, { $set: {'user.$.username': '一回'} });
即可对实现对 Array - Subdocument 的更新
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
暂无简介
文章 0 评论 0
接受
发布评论
评论(2)
fidding通过各种百度谷歌,终于找到了解决方案,在此为了其他跟我一样困惑的同道中人,应慷慨解囊!
好了,废话不多说。
首先我的数据结构
在此我想将message中的read值设置为1(默认是0)
就这样实现了nodejs中mongoose更新Array数据,其通俗的来说就是拿到所有数据,然后修改想修改的数据,最后调用save方法,而不用pull后再set了。
至于删除$pull与添加$addToSet就是小菜一碟了,我也就不多说了。
好了。joining
即可对实现对 Array - Subdocument 的更新