node.js - mongoose如何对数组进行更新?
PHP中文网
PHP中文网 2017-04-17 13:14:53
[Node.js讨论组]

必须先$pull再$addtoSet吗?

PHP中文网
PHP中文网

认证高级PHP讲师

全部回复(2)
PHP中文网

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 的更新

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号