【问题标题】:Updating subarray property with MongoDB and Mongoose使用 MongoDB 和 Mongoose 更新子数组属性
【发布时间】:2014-01-10 19:43:41
【问题描述】:

我是 Mongoose 和 MongoDB 的新手,我正在尝试更新以下模型的值:

var userSchema = mongoose.Schema({
  username  : String,
  playlist  : [{
    name    : String,
    active  : {type: Boolean, default: false},
  }]
});

我想要做的是将一个用户的所有播放列表设置为 false,然后仅将一个设置为 true。通过执行以下请求,它恰好删除了我的播放列表中的信息:

this.model('User').findByIdAndUpdate(userId, {$set:{playlist:{active:false}}})
  .exec(
    function(err, user){
      //DO callback treatment here
    });

我看到有人说,一旦检索到User,就得对子数组做一次foreach,但是没有办法直接用mongoose和mongodb来做这样的处理吗?

感谢您的回答!

【问题讨论】:

    标签: node.js mongodb mongoose


    【解决方案1】:

    如果你这样做:

    {$set:{playlist:{active:false}}}
    

    然后,您将 整个 playlist 数组替换为 $set playlist 参数。您应该能够执行以下操作,只需向playlist 添加一个额外的字段:

    {$set:{"playlist.active": false}}
    

    在这里,您没有修改 playlist 参数,而只是指示 MongoDB 对 playlist 中的 active 字段执行某些操作。

    【讨论】:

      【解决方案2】:

      试试这个:

      {$set: {'playlist.$.active': false}
      

      阅读它here

      【讨论】:

      • 谢谢,它成功了!我必须指定要更新的播放列表,然后使用它工作的位置运算符指定字段:this.model('User').update({_id:userId, 'playlist.active':true},{$set:{"playlist.$.active":false}}) .exec( function(err, user){ //CODE MANAGEMENT HERE });
      猜你喜欢
      • 1970-01-01
      • 2015-09-19
      • 1970-01-01
      • 1970-01-01
      • 2017-04-16
      • 2020-02-26
      • 2019-06-10
      • 2012-09-04
      • 1970-01-01
      相关资源
      最近更新 更多