Няма причина да се показва дублираща се грешка в индекса в първия случай, тъй като просто се опитва да актуализира _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
стойност.