sql >> Databáze >  >> NoSQL >> MongoDB

Přeskočit a omezit pro stránkování pro agregát Mongo

Váš problém se netýká skip() a limit(); to funguje dobře. Problém je s vaší celkovou logikou; iterujete všech 39 kolekcí v první smyčce a poté připojujete každý výsledek agregace do cursor_list .

Nemohu přijít na logiku toho, co se snažíte udělat, protože první příklad hledá ve sbírce slov a druhý hledá ve všech sbírkách pole slova; s tím, co bylo řečeno, můžete pravděpodobně zjednodušit svůj přístup k něčemu jako:

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])

UPRAVIT tak, aby odrážely komentáře. Plně zpracovaný příklad funkce, která to má provést. Není potřeba agregační dotaz – to zvyšuje složitost.

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. Rozdíl mezi InputSplit a bloky v Hadoopu

  2. Spring boot mongodb auditing error

  3. Tok změn MongoDB 4.4.4 vrací všechny aktualizace dokumentů, nikoli filtrovanou podmínku, která odpovídá?

  4. Jak zapsat funkci-y přijímající parametr-fct_x, který přistupuje k var-a, která musí být definována ve funkci-y?