There is the $setOnInsert parameter for upsert's which only sets fields on an insert, not when on an update. When you have no other update parameters or fields, existing documents won't be affected at all by this query.
You can use it like that:
db.collection.update(
{
<your query >
},
{ $setOnInsert: {
<your new document>
}
},
true //upsert
)