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ị.