Tôi đã theo ấn tượng rằng đây là hành vi MongoDB bình thường, và không có gì để làm với 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:
getLastError.n báo cáo số lượng tài liệu cập nhật hoặc xóa, nếu các hoạt động trước đó là một bản cập nhật hoặc loại bỏ hoạt động.
Một insert
được không phải một update
hay một remove
, n
dường như không được xác định và 0 là tốt một giá trị mặc định như bất kỳ. Bạn có thể kiểm tra xem nó một cách dễ dàng đủ trong vỏ Mongo:
> db.test.insert({_id: 'test'})
> db.getLastErrorObj()
{ "n" : 0, "connectionId" : 7, "err" : null, "ok" : 1 }
Trừ khi tôi là nhầm lẫn, nó không thực sự là một vấn đề: tự hỏi mình, theo đó hoàn cảnh chèn sẽ thất bại (trừ, nói rằng, một kết nối thất bại). Người duy nhất tôi có thể nghĩ là vi phạm ràng buộc duy nhất, đ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 một ví dụ WriteResult
ở tất cả các phương tiện hoạt động đã thành công và một tài liệu đã được chèn vào.
Một vài lưu ý:
- tranh luận trước đây của tôi xoay quanh
WriteConcern
của bạn là đủ cao mà lỗi được báo cáo. Ví dụ: nếu bạn đang sử dụng WriteConcern.NONE
, sẽ không có ngoại lệ nào được nêu ra.
- nếu số tài liệu được cập nhật là tuyệt đối phải cho bạn, bạn luôn có thể sử dụng
save
thay vì insert
. Không phải rất sạch sẽ, nhưng nó cư xử theo cách bạn mong đợi.
Nguồn
2013-09-06 14:19:38
Nó hoạt động đúng cách. Bạn đang sử dụng phiên bản mongo nào? Các tài liệu được chèn đúng cách trong DB sau thao tác này phải không? – Buchi
có các tài liệu được chèn chính xác! Phiên bản Mongo: 2.2.2 –
Tôi cũng đang tìm kiếm điều tương tự. Nó đang quay trở lại 0. Xem ở đây cũng như http: // stackoverflow.com/questions/10662858/mongodb-java-api-writeresultgetn – btiernay