Невозможно использовать переменную при построении запроса $ pop в Meteor

57
4

Я пытаюсь использовать $ pop во встроенном массиве в Meteor, и я вполне уверен, что мое ограниченное понимание сферы переменных и порядка операций вызывает у меня проблемы.

Чтобы обеспечить упрощенный пример, это работает:

do_thing = function(foo) {
Coll.update(foo, {$pop: { "bar.baz": 1 }} );
};

do_thing( "123" );

Но это не так:

do_thing = function(foo, bar) {
var tmp = bar + ".baz"
Coll.update(foo, {$pop: { tmp: 1 }} );
};

do_thing( "123", "bar" );

Основная проблема заключается в том, что обновление успешно выполняется, когда я жестко программирую массив, из которого я хочу поместить этот элемент, но обновление не выполняется, когда этот массив динамически сконструирован. Я предполагаю, что причина заключается не в том, что это переменная, так как "foo" работает, и вместо этого проблема кроется в том, что "tmp" не может получить экземпляр вовремя для вызова update().

Может ли кто-нибудь предложить, как я могу достичь результата, который я ищу: вытащить элемент из поля, имя которого я не обязательно буду знать, пока не получу функцию?

В качестве альтернативы, я открыт для более широких предложений о том, как построить эту функцию, если я беру на себя совершенно неправильный подход.

спросил(а) 2013-07-12T19:13:00+04:00 7 лет, 3 месяца назад
1
Решение
70

Литеральная строка "tmp" используется для имени ключа, а не для значения, которое вы передаете для переменной "tmp".

Попробуй это:

updateboj = {}
updateobj[tmp] = 1
Coll.update(foo, {$pop: updateobj} );

ответил(а) 2013-07-12T23:01:00+04:00 7 лет, 3 месяца назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема