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

pymongo.errors.CursorNotFound:id con trỏ '...' không hợp lệ tại máy chủ

Bạn gặp lỗi này vì con trỏ đang hết thời gian chờ trên máy chủ (sau 10 phút không hoạt động).

Từ tài liệu pymongo:

Con trỏ trong MongoDB có thể hết thời gian chờ trên máy chủ nếu chúng đã mở diễn đàn trong thời gian dài mà không thực hiện bất kỳ thao tác nào trên chúng. Điều này can thiệp vào một ngoại lệ CursorNotFound đang được đưa ra khi cố gắng điều chỉnh con trỏ.

Khi bạn gọi collection.find phương thức nó truy vấn một bộ sưu tập và nó trả về một con trỏ đến các tài liệu. Để lấy các tài liệu, bạn lặp lại con trỏ. Khi bạn lặp lại con trỏ, trình điều khiển đang thực sự đưa ra yêu cầu tới máy chủ MongoDB để tìm nạp thêm dữ liệu từ máy chủ. Lượng dữ liệu trả về trong mỗi yêu cầu được đặt bởi batch_size() phương pháp.

Từ tài liệu:

Giới hạn số lượng tài liệu được trả lại trong một đợt. Mỗi đợt yêu cầu một chuyến đi vòng quanh máy chủ. Nó có thể được điều chỉnh để tối ưu hóa hiệu suất và giới hạn truyền dữ liệu.

Đặt batch_size thành một giá trị thấp hơn sẽ giúp bạn khắc phục lỗi lỗi timeout, nhưng nó sẽ làm tăng số lần bạn truy cập vào máy chủ MongoDB để lấy tất cả tài liệu.

Kích thước lô mặc định:

Đối với hầu hết các truy vấn, lô đầu tiên trả về 101 tài liệu hoặc chỉ đủ tài liệu để vượt quá 1 megabyte. Kích thước lô sẽ không vượt quá kích thước tài liệu BSON tối đa (16 MB).

Không có kích thước lô "đúng" chung. Bạn nên kiểm tra với các giá trị khác nhau và xem đâu là giá trị thích hợp cho trường hợp sử dụng của mình, tức là bạn có thể xử lý bao nhiêu tài liệu trong một cửa sổ 10 phút.

Phương án cuối cùng là bạn đặt no_cursor_timeout=True . Nhưng bạn cần chắc chắn rằng con trỏ được đóng sau khi bạn xử lý xong dữ liệu.

Làm thế nào để tránh nó mà không cần try/except :

cursor = collection.find(
     {"x": 1},
     no_cursor_timeout=True
)
for doc in cursor:
    # do something with doc
cursor.close()


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB tổng hợp trong nhóm hàng ngày

  2. Làm thế nào để tạo lược đồ mongoose động?

  3. Toán tử tổng hợp MongoDB $ count

  4. Lập trình cơ sở dữ liệu Python với MongoDB cho người mới bắt đầu

  5. Nhóm có điều kiện với $ tồn tại bên trong $ cond