The trick to lowering your lock percentage and thus having faster updates is to query the document you are going to update, before you perform the update. Querying before doing an upsert might seem counter intuitive at first glance, but it makes sense when you think about it.
The read ensures that whatever document you are going to update is in RAM. This means the update, which will happen immediately after the read, always updates the document in RAM, which is super fast. I think of it as warming the database for the document you are about to update.
This makes it sound like upserts and field level updates are just syntactic sugar in MongoDB,
their real value being lost if the system is fetching full entries1 in memory for an update.
Original title and link: MongoDB Tips and Tricks: More Reads Make For Faster Writes ( ©myNoSQL)