更新MongoDB中数组内部的嵌入对象

Den*_*lin 9 mongodb mongodb-query

我有文件喜欢

{
    id : 100,
    heros:[
        {
           nickname : "test",
           spells : [
             {spell_id : 61, level : 1},
             {spell_id : 1, level : 2}
           ]
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

我不能$set拼的level : 3spell_id : 1spells那里面heros有绰号"测试我尝试此查询:

db.test.update({"heros.nickname":"test", "heros.spells.spell_id":1}, 
{$set:{"heros.spells.$.level":3}});
Run Code Online (Sandbox Code Playgroud)

我看到的错误是

无法使用字符串字段名称附加到数组[spells]感谢您的帮助.

dcr*_*sta 11

您只能将$位置运算符用于单级数组.在您的情况下,您有一个嵌套数组(heros是一个数组,并且每个英雄都有一个spells数组).

如果您知道数组的索引,则可以在执行更新时使用显式索引,例如:

> db.test.update({"heros.nickname":"test", "heros.spells.spell_id":1}, {$set:{"heros.0.spells.1.level":3}});
Run Code Online (Sandbox Code Playgroud)