$set operator bruges på upsert også. Så det er noget sludder at henvise til samme felter både på $set og $setOnInsert .
Bare prøv dette på en tom samling:
db.items.remove();
db.items.update({},{$set:{a:1},$setOnInsert:{b:2}},{upsert:1})
db.items.find({});