Er is geen reden om in het eerste geval een dubbele indexfout weer te geven, omdat het gewoon probeert de _id bij te werken en name velden van hetzelfde record met dezelfde waarde.
Als je het wilt proberen
db.foo.update({ _id: '1098'}, { _id: 'doe123', name: 'John Doe'}, { upsert: true});
u krijgt een foutmelding, omdat de query de record probeert bij te werken met een andere _id met een aantal bestaande _id waarde.
In het tweede geval heb je eerst een record aangemaakt met name veld en dan probeert u dezelfde naam in een ander record bij te werken, wat een fout zal geven als name is een unieke index.
Bewerken:-
Als je probeert
db.foo.insert({ _id: 'doe123', name: 'John Doe'});
geeft u de foutmelding, omdat u in dit geval probeert een record in te voegen dat al aanwezig is, bijv. _id is uniek en u probeert nog een record te maken met dezelfde _id waarde.