Ihr Problem liegt nicht bei skip()
und limit()
; das funktioniert prima. Das Problem liegt in Ihrer Gesamtlogik; Sie durchlaufen alle 39 Sammlungen in der ersten Schleife und hängen dann jedes Ergebnis der Aggregation an cursor_list
an .
Ich kann die Logik dessen, was Sie versuchen, nicht verstehen, da das erste Beispiel in einer Wortsammlung sucht und das zweite in allen Sammlungen nach einem Wortfeld sucht. Nachdem dies gesagt wurde, können Sie Ihren Ansatz wahrscheinlich so vereinfachen:
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])
BEARBEITEN, um Kommentare widerzuspiegeln. Vollständig ausgearbeitetes Beispiel einer Funktion, um dies auszuführen. Keine Aggregationsabfrage erforderlich – dies erhöht die Komplexität.
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')