使用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 }); 

我看到一些人说,一旦他们找回了用户,他们不得不对这个子arrays做一个f​​oreach,但是没有办法直接用mongoose和蒙哥巴来做这样的处理吗?

感谢您的回答 !

尝试这个:

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

在这里阅读

如果你这样做:

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

然后,当您$set playlist参数时,您将replace整个 playlist数组。 您应该可以执行以下操作,只需在playlist添加一个额外的字段即可:

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

在这里,您不是在修改playlist参数,而只是指示MongoDB对playlistactive字段进行操作。