If you have a very large number of users, the update portion of your upsert is probably taking a long time to scan your collection. Be sure to properly index your Meteor.users collection.
Ah, good call. I’m not sure. Meteor should create an index on _id by default. It may be helpful to use Mongo’s explain on your query to make sure that the results are what you expect:
Ideally, the returned cursor would be either an IDCursor, or some kind of BtreeCursor. If you’re seeing a BasicCursor, you’re scanning and should set up an index.