首页 > mongoose如何对数组进行更新?

mongoose如何对数组进行更新?

必须先$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

【热门文章】
【热门文章】