简体   繁体   中英

Meteor/Mongo: Finding and updating certain elements in a collection

I'm starting off with Meteor and need some help with Mongo. I have a collection of names that I'm displaying on a list and want to be able to update one variable of certain entries in the database based on other criteria. Basically what I want to do is:

For every entry where characteristic A = true and B = true, change characteristic C to be false.

So far, I've been trying to figure out how Mongo can handle a "for each" loop over the elements of the collection, and for each element check if conditions A and B hold, and then collection.update(element, {C: false}). This is proving to be a lot more problematic than I thought. I want to do something like this (using dummy variable names):

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

I've been changing this base code around, but am starting to sense that I'm missing something basic about indexing/how collections work in Mongo. Can you index a collection like this (and if so, is this even the most convenient way to do what I'm trying to do?)?

Of course I figure out how to do this right after posting, and of course it's suggested in the Meteor documentation!

And, of course, it's a simple solution:

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

As already suggested in comments, the correct answer is:

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

(At least in pure MongoDB, see there ).

Without multi: true it will change only one document matching the criteria.

In Meteor it is a bit more tricky, as you are not allowed to do client-side updates other than by matching it (so no possibility for various criteria, no possibility for multi ), see http://docs.meteor.com/#update .

You can iterate over all finds, but it would be better to run such code server-side.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM