Tôi có ấn tượng rằng đây là hành vi MongoDB bình thường và không liên quan gì đến trình điều khiển Java.
Điều duy nhất tôi có thể tìm thấy trong tài liệu là this :
Một insert
không phải là update
cũng không phải remove
, n
dường như không được chỉ định và 0 là một giá trị mặc định tốt như bất kỳ giá trị nào. Bạn có thể kiểm tra nó đủ dễ dàng trong mongo shell:
> db.test.insert({_id: 'test'})
> db.getLastErrorObj()
{ "n" : 0, "connectionId" : 7, "err" : null, "ok" : 1 }
Trừ khi tôi nhầm, nó không thực sự là một vấn đề:hãy tự hỏi bản thân xem trong những trường hợp nào thì chèn sẽ không thành công (ngoại trừ lỗi kết nối). Điều duy nhất tôi có thể nghĩ đến là vi phạm ràng buộc unicity, điều này sẽ dẫn đến một ngoại lệ. Vì vậy, gần như theo định nghĩa, thực tế là bạn nhận được WriteResult
ví dụ nào đó có nghĩa là thao tác đã thành công và một tài liệu đã được chèn vào.
Một số lưu ý:
- đối số trước đây của tôi dựa trên
WriteConcern
của bạn đủ cao để báo cáo lỗi. Nếu bạn đang sử dụngWriteConcern.NONE
chẳng hạn, sẽ không có ngoại lệ nào được nêu ra. - nếu số lượng tài liệu được cập nhật là điều tuyệt đối bắt buộc đối với bạn, bạn luôn có thể sử dụng
save
thay vìinsert
. Không sạch lắm, nhưng nó hoạt động theo cách bạn có vẻ mong đợi.