Det finns ingen anledning att visa dubblettindexfel i det första fallet eftersom det bara försöker uppdatera _id och name fält i samma post med samma värde.
Om du vill försöka
db.foo.update({ _id: '1098'}, { _id: 'doe123', name: 'John Doe'}, { upsert: true});
du kommer att få ett felmeddelande, eftersom frågan försöker uppdatera posten med annan _id med någon befintlig _id värde.
I det andra fallet skapade du först en post med name och sedan försöker du uppdatera samma namn i en annan post, vilket kommer att ge felet som name är unikt index.
Redigera :-
Om du försöker
db.foo.insert({ _id: 'doe123', name: 'John Doe'});
ger dig felet, eftersom du i det här fallet försöker infoga en post som redan finns, dvs. _id är unik och du försöker skapa ytterligare en post med samma _id värde.