2014-01-10 153 views
1

子陣財產我是新來的貓鼬和MongoDB,我試圖更新下列型號的值:更新與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 
    }); 

我看到有些人說,一旦檢索到的用戶,他們不得不做的子陣列的foreach,但有沒有辦法直接使用貓鼬和mongodb做這樣的治療?

感謝您的回答!

回答

1

試試這個:

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

讀到它here

+0

謝謝,它的伎倆! 我必須指定要更新的播放列表,然後使用它的位置運算符指定字段: 'this.model('User')。update({_ id:userId,'playlist.active':true},{ $ set:{「playlist。$。active」:false}}) .exec( function(err,user){ //代碼管理這裏 });' – user3122532

+0

很高興工作:) – gabeno

2

如果你這樣做:

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

然後你更換整個playlist數組作爲你$setplaylist說法。你應該能夠做到以下幾點,只是增加一個額外的字段來playlist

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

在這裏,我們不修改playlist的說法,而只是指示的MongoDB做的active場東西playlist