动态创建Meteor.js MongoDB查询

时间:2014-11-26 01:51:41

标签: mongodb meteor

出于某种原因,我很难让这个工作。我有一个名为'cats'的Mongo系列,另一个名为'rows'。 'cats'中的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是我要修改的文档的ID)

当然,它不能按预期工作,只需插入...{currentCat: 57}而不是变量currentCat的值。接下来,我尝试创建一个查询对象(如here所述):

var query = ({ _id: row }, { $push: { currentCat: currentAmount } })

这也失败了,但这一次有一个奇妙的描述性错误信息:

Error: Invalid modifier. Modifier must be an object.

任何帮助都会受到赞赏,因为我花了几个小时和无数谷歌搜索(虽然答案很明显,我只是看不到它 - 我仍然试图习惯PHP之后的Meteor)

编辑:我希望完成的文档看起来像这样:

 { "_id" : "PshEYKebccw7eYaTo", 
   "createdAt" : ISODate("2014-11-26T00:52:51.840Z"),
   "cat1" : 312,
   "cat2" : 564,
   "owner" : "GiWCb8jXbPfzyc5ZF",
   "text" : "asdf" 
}

1 个答案:

答案 0 :(得分:2)

$push仅用于在数组上运行。根据您的Row文档示例,您不需要在此处进行数组操作。

尝试在每个新cat值的Row文档中设置字段。

  var catData = {};
  catData[currentCat] = currentAmount;
  // As an example, catData now looks like {'cat1': 312}

  Rows.update(
    { _id: row },
    { $set: catData }
  );