Upsert functionality is great in update method, but it seems it has one big disadvantage, and I cannot find a reasonable solution to it.

The problem is that I want to update only one field if there are results found matching the query criteria, but none rows found, I want to insert a lot of fields.

For example if **find( {name: John, surname: Connor })** returns result, I want to set only new age for him like **{ age: 33 }**, but if no results found, I want to insert a lot of fields, something like **{ name: John, surname: Connor, age: 32, role: commander, character: cautious, hobby: 'kill terminators' }**

Is there a pretty way to achieve this on one query? Or the only solution is straighforward one, meaning find, check how many results found, and based on it insert or update?

**EDIT:** I made an addition to explain the need of ability to make this in one step. The solution to make it in two steps (first find, and then insert/update) is good when having one worked to find and update/insert, but this will fail when having like 1000 of workers that will try to do it - in result I may have a lot of John Connors in the database (when first couple of workers will find no results and all of them inserts a new row) unless I make an unique index to Name-Surname pair (somehow). But I am looking for solution not to do so.