mongoose如何对数组进行更新?

发布于 2022-09-01 23:54:31 字数 27 浏览 14 评论 0

必须先$pull再$addtoSet吗?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

§对你不离不弃 2022-09-08 23:54:31

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

澜川若宁 2022-09-08 23:54:31
TestModel.update({ 'user.email': 'xxxx@xxx.com' }, { $set: {'user.$.username': '一回'} });

即可对实现对 Array - Subdocument 的更新

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文