Vấn đề của bạn không phải là với skip()
và limit()
; điều đó đang hoạt động tốt. Vấn đề là với logic tổng thể của bạn; bạn đang lặp lại tất cả 39 tập hợp trong vòng lặp đầu tiên và sau đó nối từng kết quả của tập hợp vào cursor_list
.
Tôi không thể tìm ra logic của những gì bạn đang cố gắng làm, vì ví dụ đầu tiên là tìm kiếm trong một bộ sưu tập từ và thứ hai là tìm kiếm trong tất cả các bộ sưu tập cho một trường từ; với điều đó đã nói, bạn có thể đơn giản hóa cách tiếp cận của mình với những thứ như:
offset = 0
per_page = 10
collections = db.list_collection_names()
#
# Add some logic on the collections array to filter what is needed
#
print(collections[offset:offset+per_page])
CHỈNH SỬA để phản ánh ý kiến. Ví dụ hoạt động đầy đủ về một chức năng để thực hiện điều này. Không cần truy vấn tổng hợp - điều này làm tăng thêm độ phức tạp.
from pymongo import MongoClient
from random import randint
db = MongoClient()['testdatabase1']
# Set up some data
for i in range(39):
coll_name = f'collection{i}'
db[coll_name].delete_many({}) # Be careful; testing only; this deletes your data
for k in range (randint(0, 2)):
db[coll_name].insert_one({'word': '123456'})
# Main function
def test(offset, per_page, word_to_find):
found = []
collections = db.list_collection_names()
for collection in sorted(collections):
if db[collection].find_one({word_to_find: { '$exists': True}}) is not None:
found.append(collection)
print(found[offset:offset+per_page])
test(offset=0, per_page=10, word_to_find='word')