$set operatorn används på upsert för. Så det är nonsens att hänvisa till samma fält både på $set och $setOnInsert .
Prova bara detta på en tom samling:
db.items.remove();
db.items.update({},{$set:{a:1},$setOnInsert:{b:2}},{upsert:1})
db.items.find({});