【发布时间】:2015-01-24 05:51:18
【问题描述】:
由于某种原因,我很难让它发挥作用。我有一个名为“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"
}
【问题讨论】:
-
你能显示你期望得到的json吗?
-
@KeithNicholas 添加了一个示例。
-
您希望 Row 文档看起来像什么?根据您的代码,我期待类似
{_id: 123, currentCat: [5.25, 6.75, 1.55, 2.78]} -
@Colllin 请看我的例子。我希望每个
cat都有一个字段和值对。 -
好的,所以基本上你错过了其他答案中查询对象的要点。在 Javascript 中,
{ currentCat: currentAmount }变为{ 'currentCat': 312 },因为键必须是文字键。您不能使用变量作为键名。为此,您必须按照我在下面的答案中构建对象。通过使用方括号表示法,您可以在对象上设置动态键,然后将该对象发送到查询中。catData[currentCat]首先将currentCat变量解释为'cat1',然后访问该键,就像您已经完成catData['cat1']一样。