Không có lý do gì để hiển thị lỗi chỉ mục trùng lặp trong trường hợp đầu tiên vì nó chỉ đang cố cập nhật _id và name các trường của cùng một bản ghi có cùng giá trị.
Nếu bạn sẽ thử
db.foo.update({ _id: '1098'}, { _id: 'doe123', name: 'John Doe'}, { upsert: true});
bạn sẽ gặp lỗi, vì truy vấn đang cố cập nhật bản ghi với _id khác với một số _id hiện có giá trị.
Trong trường hợp thứ hai, trước tiên bạn đã tạo một bản ghi với name và sau đó bạn đang thử cập nhật cùng một tên trong một bản ghi khác, điều này sẽ gây ra lỗi là name là chỉ mục duy nhất.
Chỉnh sửa:-
Nếu bạn đang cố gắng
db.foo.insert({ _id: 'doe123', name: 'John Doe'});
sẽ cung cấp cho bạn lỗi, như trong trường hợp này, bạn đang cố gắng chèn một bản ghi đã có sẵn, tức là _id là duy nhất và bạn đang cố gắng tạo thêm một bản ghi có cùng _id giá trị.