あなたの問題はskip()
ではありません およびlimit()
;それはうまく機能しています。問題は全体的なロジックにあります。最初のループで39個のコレクションすべてを繰り返し処理してから、集計の各結果をcursor_list
に追加します。 。
最初の例は単語コレクションを調べ、2番目の例はすべてのコレクションで単語フィールドを調べているため、あなたがやろうとしていることの論理を理解することはできません。そうは言っても、次のようなアプローチを単純化できる可能性があります。
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')