我有
这样的文件{
id : 100,
heros:[
{
nickname : "test",
spells : [
{spell_id : 61, level : 1},
{spell_id : 1, level : 2}
]
}
]
}
我不能$set
拼写level : 3
spell_id : 1
spells
heros
db.test.update({"heros.nickname":"test", "heros.spells.spell_id":1},
{$set:{"heros.spells.$.level":3}});
{{1}} {{1}}里面有昵称“test。我试过这个查询:
{{1}}
我看到的错误是
无法使用字符串字段名称附加到数组[spells] 谢谢你的帮助。
答案 0 :(得分:11)
您只能将$
位置运算符用于单级数组。在您的情况下,您有一个嵌套数组(heros
是一个数组,并且每个英雄都有一个spells
数组)。
如果您知道数组的索引,则可以在执行更新时使用显式索引,例如:
> db.test.update({"heros.nickname":"test", "heros.spells.spell_id":1}, {$set:{"heros.0.spells.1.level":3}});
答案 1 :(得分:1)
尝试这样的事情:
db.test.find({"heros.nickname":"test"}).forEach(function(x) {
bool match = false;
for (i=0 ; i< x.heros[0].spells.length ; i++) {
if (x.heros[0].spells[i].spell_id == 1)
{
x.heros[0].spells[i].level = 3;
match = true;
}
}
if (match === true) db.test.update( { id: x.id }, x );
});
显然有人打开了一张票,以添加将函数放入update子句中的功能,但尚未解决:https://jira.mongodb.org/browse/SERVER-458