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

Mongo với java - tìm truy vấn với kích thước hàng loạt

DBCursor cho phép bạn lặp lại tập hợp các tài liệu được coi là có liên quan đến truy vấn được chuyển vào find () phương pháp. Nó tìm nạp các tài liệu này một cách lười biếng từ cơ sở dữ liệu bên dưới theo từng phần của batchSize .

Vì vậy, với kích thước lô mặc định (101, IIRC), nó sẽ trả lại 101 tài liệu đầu tiên cho khách hàng của bạn và sau đó khi mã khách hàng của bạn lặp lại ngoài tài liệu thứ 101, nó sẽ lấy 101 tài liệu tiếp theo và cứ tiếp tục như vậy cho đến khi nào những điều sau đây xảy ra đầu tiên:

  • Tất cả các tài liệu có liên quan đến truy vấn của bạn đều được trả về, tức là con trỏ đã hết
  • Khách hàng của bạn ngừng lặp lại

Điều tương tự cũng áp dụng khi bạn đặt Kích thước hàng loạt rõ ràng vì vậy trong trường hợp của bạn khi bạn đặt batchSize =500 , find () cuộc gọi trả về một DBCursor chứa (nhiều nhất) 500 tài liệu và nếu có hơn 500 tài liệu phù hợp với truy vấn của bạn thì khi bạn lặp lại ngoài tài liệu thứ 500, trình điều khiển Java MongoDB sẽ (ẩn sau) tìm nạp đợt tiếp theo.

Bạn đã nêu ...

... nếu bạn chỉ nhận được 500 tài liệu thì bạn đã ngừng lặp lại sau 500 hoặc chỉ 500 tài liệu được coi là có liên quan đến truy vấn của bạn .

Bạn có thể xem có bao nhiêu tài liệu có liên quan đến truy vấn của mình bằng cách sử dụng count () phương pháp. Ví dụ:

int count = collection.find(query).count();

Bạn cũng có thể lấy tất cả các tài liệu có liên quan đến truy vấn của mình chỉ trong một lần mà không sử dụng DBCursor như thế này ...

List<DBObject> obj = collection.find(query).toArray();

... mặc dù tất nhiên điều này có thể có ý nghĩa đối với đống ứng dụng của bạn vì nó sẽ dẫn đến việc mọi tài liệu đáp ứng tiêu chí của bạn sẽ được lưu trữ trên heap trong ứng dụng khách của bạn (thay vì cách tiếp cận thân thiện với bộ nhớ hơn là đọc chúng theo lô thông qua mã <> DBCursor ).



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Chọn dựa trên dấu thời gian và cập nhật dấu thời gian bằng 0

  2. Có quy ước đặt tên bộ sưu tập trong MongoDB không?

  3. Có mã hóa dự phòng cho MySQL, MongoDB &PostgreSQL - ClusterControl 1.5.1

  4. Cách tốt nhất để lưu trữ MongoDB trên DigitalOcean

  5. Các truy vấn không gian địa lý có hoạt động trên mảng không? ($ geoWithin, $ geoIntersects)