आपकी समस्या skip()
. के साथ नहीं है और limit()
; जो ठीक काम कर रहा है। मुद्दा आपके समग्र तर्क के साथ है; आप पहले लूप में सभी 39 संग्रहों को पुनरावृत्त कर रहे हैं और फिर एकत्रीकरण के प्रत्येक परिणाम को cursor_list
में जोड़ रहे हैं ।
आप जो करने की कोशिश कर रहे हैं उसके तर्क को मैं नहीं समझ सकता, क्योंकि पहला उदाहरण शब्द संग्रह में देख रहा है और दूसरा शब्द क्षेत्र के लिए सभी संग्रह देख रहा है; इसके साथ ही, आप कुछ इस तरह से अपने दृष्टिकोण को सरल बना सकते हैं:
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])
टिप्पणियों को प्रतिबिंबित करने के लिए संपादित करें। इसे करने के लिए किसी फ़ंक्शन का पूर्ण कार्य उदाहरण। एकत्रीकरण क्वेरी की कोई आवश्यकता नहीं है - यह जटिलता जोड़ता है।
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')