Динамически создайте запрос Meteor.js MongoDB
По какой-то причине мне трудно заставить это работать. У меня есть коллекция "Монго" под названием "кошки", а другая - "Строки". cat
поле в "кошках" является currentCat
, Затем я хочу иметь возможность обновить документ в "строки", ссылаясь на ранее существующий документ с _id
, Там нет проблем. Но для каждого currentCat
Я хочу добавить элемент в документ currentCat
как поле и что-то еще как значение (currentPer
). Я придумал это:
var cats = Cats.find({owner: Meteor.userId()}, {fields: {cat: 1, per: 1}});
cats.forEach(function(cats) { //Inserts the rest of the row
var currentCat = cats['cat'];
var currentPer = cats['per'];
var currentAmount = Math.round(amount*currentPer*100)/100;
Rows.update(
{ _id: row },
{ $push: { currentCat: currentAmount } }
);
});
(row
это идентификатор документа, который я хочу изменить)
Конечно, это не работает, как ожидалось, а просто вставляет ...{currentCat: 57}
вместо значения переменной currentCat
, Затем я попытался создать объект запроса (как описано здесь):
var query = ({ _id: row }, { $push: { currentCat: currentAmount } })
Это также не удалось, но на этот раз с удивительно описательным сообщением об ошибке:
Error: Invalid modifier. Modifier must be an object.
Буду признателен за любую помощь, поскольку я потратил часы и бесчисленные поиски в Google по этому вопросу (хотя ответ, вероятно, очевиден, и я просто не вижу его - я все еще пытаюсь привыкнуть к Meteor после PHP).
РЕДАКТИРОВАТЬ: Я хочу, чтобы готовый документ выглядел примерно так:
{ "_id" : "PshEYKebccw7eYaTo",
"createdAt" : ISODate("2014-11-26T00:52:51.840Z"),
"cat1" : 312,
"cat2" : 564,
"owner" : "GiWCb8jXbPfzyc5ZF",
"text" : "asdf"
}
1 ответ
$push
только для работы с массивами. Основываясь на вашем примере документа Row, вам не нужна операция с массивом.
Попробуйте установить поля в документе Row для каждого нового значения cat.
var catData = {};
catData[currentCat] = currentAmount;
// As an example, catData now looks like {'cat1': 312}
Rows.update(
{ _id: row },
{ $set: catData }
);