出于某种原因,我很难让这个工作。我有一个名为'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"
}
答案 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 }
);