【问题标题】:Meteor/Mongo: Finding and updating certain elements in a collectionMeteor/Mongo:查找和更新集合中的某些元素
【发布时间】:2012-12-10 13:39:28
【问题描述】:

我从 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 中工作的基本内容。你可以索引这样的集合吗(如果可以,这是否是我想做的最方便的方法?)?

【问题讨论】:

    标签: javascript mongodb meteor


    【解决方案1】:

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

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

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

    【讨论】:

    • 这仅适用于与选择器匹配的第一个文档。你需要。 collection.update({A: true, B: true}, {$set: {C:false}}, 0,1);所有行。
    • @DavidWihl 要编辑多行,您需要将 {multi: true} 设置为第三个参数而不是 0,1(请参阅流星文档,docs.meteor.com/#update)。所以应该是这样的:collection.update({A: true, B: true}, {$set: {C: false}}, {multi: true})
    • 是的,我认为 Rouven 有针对该问题的内置解决方案!
    【解决方案2】:

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

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

    (至少在纯 MongoDB 中,see there)。

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

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

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

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-03
    • 1970-01-01
    相关资源
    最近更新 更多