2014-08-30 51 views
0

嘿,我嘗試使用下面的代碼更新在陣列

setDuelToInactive: (duel) -> 
    Duels.update({_id: duel._id}, $set: {active: false}) 
    userOneId = duel.userOneId 
    userTwoId = duel.userTwoId 

    Users.update({_id: userOneId}, { $set: { 'profile.character.souls.$.active': false} }) 
    Users.update({_id: userTwoId}, { $set: { 'profile.character.souls.$.active': false} }) 


    return 

,其中在收集用戶的亡靈字段是陣列更新包含在陣列中的所有子文檔的所有元素。收到以下錯誤消息

MongoError: Cannot apply the positional operator without a corresponding query field containing an array. 
+0

MongoDB服務器(如2.6)不支持使用位置運算符($)更新數組中的所有子文檔。位置運算符僅適用於第一個匹配元素。您可以在MongoDB問題跟蹤器中觀看/上傳一個功能請求:[SERVER-1243:使用位置運算符更新數組中的所有項目](https://jira.mongodb.org/browse/SERVER-1243)。最快的臨時解決方法可能是使用完整數組檢索文檔,並在保存前在應用程序代碼中執行必要的操作。 – Stennie 2014-08-30 13:00:09

回答

0

不能使用位置操作者$更新陣列內人子文檔。請參閱the documentation:運算符匹配匹配查詢的數組的第一個元素。

這也意味着您的查詢應以某種方式使用數組字段(profile.character.souls)。你的不是,所以錯誤。

在這個時候,你打算做什麼沒有捷徑,你需要手動列出所有的索引。看到這個問題:How to Update Multiple Array Elements in mongodb