MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

Пропуснете и ограничете за пагиниране за агрегат Mongo

Вашият проблем не е с skip() и limit(); това работи добре. Проблемът е в цялостната ви логика; итерирате всички 39 колекции в първия цикъл и след това добавяте всеки резултат от агрегацията към cursor_list .

Не мога да разбера логиката на това, което се опитвате да направите, тъй като първият пример търси в колекция от думи, а вторият търси във всички колекции поле за думи; с това казано, вероятно можете да опростите подхода си до нещо като:

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. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Кой е алтернативният плъгин за elastic river-mongodb, поддържан от elasticsearch 2.2.0?

  2. Как работи примерът за броя на съобщенията в документите на Meteor?

  3. Mongo отваря твърде много връзки

  4. дали FindIterable<Document> зарежда всички документи?

  5. Как да конфигурирате нов порт за mongodb