Nie ma powodu, aby wyświetlać błąd zduplikowanego indeksu w pierwszym przypadku, ponieważ po prostu próbuje zaktualizować _id i name pola tego samego rekordu o tej samej wartości.
Jeśli spróbujesz
db.foo.update({ _id: '1098'}, { _id: 'doe123', name: 'John Doe'}, { upsert: true});
otrzymasz błąd, ponieważ zapytanie próbuje zaktualizować rekord z innym _id z pewnym istniejącym _id wartość.
W drugim przypadku najpierw utworzyłeś rekord z name a następnie próbujesz zaktualizować tę samą nazwę w innym rekordzie, co spowoduje błąd jako name jest unikalnym indeksem.
Edytuj :-
Jeśli próbujesz
db.foo.insert({ _id: 'doe123', name: 'John Doe'});
wyświetli błąd, ponieważ w tym przypadku próbujesz wstawić rekord, który jest już obecny, tj. _id jest unikalny i próbujesz utworzyć jeszcze jeden rekord z tym samym _id wartość.