Няма причина да се показва дублираща се грешка в индекса в първия случай, тъй като просто се опитва да актуализира _id и name полета от един и същи запис с една и съща стойност.
Ако опитате
db.foo.update({ _id: '1098'}, { _id: 'doe123', name: 'John Doe'}, { upsert: true});
ще получите грешка, тъй като заявката се опитва да актуализира запис с различен _id с някакъв съществуващ _id стойност.
Във втория случай първо сте създали запис с name и след това се опитвате да актуализирате същото име в друг запис, което ще даде грешка като name е уникален индекс.
Редактиране:-
Ако се опитвате
db.foo.insert({ _id: 'doe123', name: 'John Doe'});
ще ви даде грешката, тъй като в този случай се опитвате да вмъкнете запис, който вече присъства, т.е. _id е уникален и се опитвате да създадете още един запис със същия _id стойност.