Ditt problem är inte med skip()
och limit()
; det fungerar bra. Problemet är din övergripande logik; du itererar alla 39 samlingarna i den första slingan och lägger sedan till varje resultat av aggregeringen till cursor_list
.
Jag kan inte lista ut logiken i det du försöker göra, eftersom det första exemplet är att leta i en ordsamling och det andra är att leta i alla samlingar efter ett ordfält; med det sagt kan du förmodligen förenkla din inställning till något som:
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])
EDIT för att återspegla kommentarer. Fullständigt fungerande exempel på en funktion för att utföra detta. Inget behov av en aggregeringsfråga - detta ökar komplexiteten.
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')