2014-08-30 52 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