使用MongoDB和Mongoose更新子数组属性

时间:2014-01-10 09:00:13

标签: node.js mongodb mongoose

我是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
    });

我见过一些人说,一旦他们找回了用户,他们就不得不对子阵列进行预测,但是没有办法直接使用mongoose和mongodb进行这样的处理吗?

感谢您的回答!

2 个答案:

答案 0 :(得分:2)

如果你这样做:

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

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

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

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

答案 1 :(得分:1)

试试这个:

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

了解here