Использование переменной в обновлении mongodb
Используя Meteor, я пытаюсь выполнить обновление, подобное следующему:
Items.update(Session.get('selectedItem'), {'$set': {'directions.0.name': area.value}})
Но я изо всех сил пытаюсь установить динамический индекс массива динамически, с чем-то вроде этого:
var index = //a value determined dynamically
Items.update(Session.get('selectedItem'), {'$set': {'directions[index]name': area.value}})
Это не работает, потому что [index] заключен в строку. Я также попытался создать пользовательскую строку, например:
var string = 'directions.'+itemIndex+'.name'
Items.update(Session.get('selectedItem'), {'$set': {string: area.value}})
Но это не работает. Любая идея о том, как это сделать?
Ответы
Ответ 1
Вам необходимо программно создать объект $set
:
var setModifier = { $set: {} };
setModifier.$set['directions.' + index + '.name'] = area.value;
Items.update(Session.get('selectedItem'), setModifier);
Обновление
Если ваша среда JavaScript поддерживает имена вычисленных свойств (например, node.js 4+), вы можете сделать это за один шаг:
Items.update(Session.get('selectedItem'), { $set: {
['directions.' + index + '.name']: area.value
}});