9

我从 Meteor 开始,需要一些关于 Mongo 的帮助。我有一组显示在列表中的名称,并且希望能够根据其他条件更新数据库中某些条目的一个变量。基本上我想做的是:

对于特征 A = true 且 B = true 的每个条目,将特征 C 更改为 false。

到目前为止,我一直在试图弄清楚 Mongo 如何处理集合元素上的“for each”循环,并为每个元素检查条件 A 和 B 是否成立,然后 collection.update(element, {C : 错误的})。事实证明,这比我想象的要麻烦得多。我想做这样的事情(使用虚拟变量名):

for (i = 0; i < collection.find().count(); i++){
    if (collection[i].A===true && collection[i].B===true)
        collection.update(collection[i], {$set: {C: false}});
};

我一直在改变这个基本代码,但我开始感觉到我缺少一些关于索引/集合如何在 Mongo 中工作的基本知识。你能像这样索引一个集合吗(如果是这样,这甚至是做我想做的最方便的方法吗?)?

4

2 回答 2

14

当然,我在发布后就知道如何做到这一点,当然,在 Meteor 文档中也有建议!

当然,这是一个简单的解决方案:

collection.update({A: true, B: true}, {$set: {C:false}});
于 2012-12-24T01:40:24.840 回答
9

正如评论中已经建议的那样,正确的答案是:

collection.update({A: true, B: true}, {$set: {C:false}}, {multi: true});

(至少在纯 MongoDB 中,请参见那里)。

没有multi: true它,只会更改一个符合条件的文档。

在 Meteor 中它有点棘手,因为除了匹配它之外,您不允许进行客户端更新(因此各种标准都不可能,也不可能multi),请参阅http://docs.meteor.com/#更新

可以遍历所有发现,但最好在服务器端运行此类代码。

于 2014-10-17T07:09:58.220 回答