Non vi è alcun motivo per mostrare un errore di indice duplicato nel primo caso poiché sta solo cercando di aggiornare il _id
e name
campi dello stesso record con lo stesso valore.
Se ci proverai
db.foo.update({ _id: '1098'}, { _id: 'doe123', name: 'John Doe'}, { upsert: true});
riceverai un errore, poiché la query sta tentando di aggiornare il record con _id
diverso con alcuni _id
esistenti valore.
Nel secondo caso, hai prima creato un record con name
campo e quindi stai provando ad aggiornare lo stesso nome in un altro record, che darà l'errore come name
è un indice univoco.
Modifica :-
Se stai provando
db.foo.insert({ _id: 'doe123', name: 'John Doe'});
ti darà l'errore, in quanto in questo caso stai cercando di inserire un record che è già presente ovvero _id
è unico e stai cercando di creare un altro record con lo stesso _id
valore.