开发者社区 问答 正文

mongoose如何对数组进行更新?

mongoose如何对数组进行更新?必须先$pull再$addtoSet吗?

展开
收起
蛮大人123 2016-06-14 18:27:41 3456 分享 版权
1 条回答
写回答
取消 提交回答
  • 我说我不帅他们就打我,还说我虚伪

    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就是小菜一碟了,我也就不多说了。
    好了。

    2019-07-17 19:38:30
    赞同 展开评论
问答地址: