2016-11-30 1 views
0

Итак, у меня есть коллекция игроков объектов, которые выглядят что-то вроде:MongoDB: обновить определенный вложенный элемент во всех документах (которые могут не иметь родителя этого элемента)

scriptData: { 
    gameState: { 
     heroRoster: { 
      hero1: { 
       abilityTrees: [{ 
        handle: 'conjuration', 
        abilities: { 
         // ... 
        } 
       }] 
      }, 
      hero2: { 
       abilityTrees: [{ 
        handle: 'movement', 
        abilities: { 
         stance_dancing: { 
          passive: true 
         } 
        } 
       }] 
      } 
     } 
    } 
} 

... и я пытаясь запустить запрос update(), который установит stance_dancing.passive на false для каждого героя, имеющего это дерево способностей, для каждого объекта игрока в коллекции.

Как вы можете видеть, tho, не каждый герой имеет дерево способности «движение». Любые советы, как должен выглядеть этот запрос?

Спасибо!

+0

IMHO вам нужно будет сделать это в javascript – harishr

ответ

1

Я полагаю, у вас есть все ваши героя в коллекции героя :) можно обновить с:

Поиск:

{ "abilityTrees.abilities.stance_dancing.passive": { $exists: true } } 

Update:

{ 
    $set: { 
     "abilityTrees.$.abilities.stance_dancing.passive" : false 
    } 
} 

Это находит все документы где существует «способность Trees.abilities.stance_dancing.passive» и устанавливается пассивное поле на указанное значение