我开始使用Meteor并需要Mongo的帮助。我有一组名称,我正在列表中显示,并希望能够根据其他条件更新数据库中某些条目的一个变量。基本上我想做的是:
对于特征A = true且B = true的每个条目,将特征C更改为false。
到目前为止,我一直试图弄清楚Mongo如何处理集合元素的“for each”循环,并检查每个元素是否存在条件A和B,然后是collection.update(元素) ,{C:false})。事实证明这比我想象的要多得多。我想做这样的事情(使用虚拟变量名称):
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如何在集合中工作的基本内容。你可以为这样的集合编制索引(如果是这样,这是否是最方便的方式来做我想做的事情?)?
答案 0 :(得分:14)
当然,我想知道如何在发布后立即执行此操作,当然,这是在Meteor文档中建议的!
当然,这是一个简单的解决方案:
collection.update({A: true, B: true}, {$set: {C:false}});
答案 1 :(得分:9)
正如评论中已经建议的那样,正确的答案是:
collection.update({A: true, B: true}, {$set: {C:false}}, {multi: true});
(至少在纯MongoDB中,see there)。
如果没有multi: true
,它只会更改一个符合条件的文档。
在Meteor中它有点棘手,因为除了匹配它之外不允许进行客户端更新(因此不可能有各种标准,multi
不可能),请参阅{{3 }}
你可以遍历所有发现,但最好是运行这样的代码服务器端。