sql >> データベース >  >> NoSQL >> MongoDB

Mongoアグリゲートのページ付けのスキップと制限

    あなたの問題は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')
    



    1. Docker [Errno 111]接続呼び出しが失敗しました( '127.0.0.1'、6379)

    2. Node.jsアプリで2つの同時リクエストが混同される

    3. jsを使用して空の配列をmongodbに保存するにはどうすればよいですか?

    4. MongoDbAtlasサーバーへの接続中にエラーが発生しました