MongoDB
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> MongoDB

MongoDB:WriteResult.getN () luôn trả về 0?

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ụng WriteConcern.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.


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Mô hình hóa dữ liệu đa ngôn ngữ trên MongoDB

  2. Lỗi [ERR_HTTP_HEADERS_SENT] Không thể đặt tiêu đề sau khi chúng được gửi đến máy khách

  3. Kiểm tra tình trạng HTTP / TCP đơn giản cho MongoDB

  4. Làm cách nào để có được tỷ lệ sử dụng nhóm kết nối hiện tại trên máy khách bằng trình điều khiển .net mongo?

  5. Không thể khởi động Mongo DB