Динамически создайте запрос 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 }
  );
Другие вопросы по тегам