MongoDB
 sql >> Teknologi Basis Data >  >> NoSQL >> MongoDB

Lewati dan Batasi untuk pagination untuk agregat Mongo

Masalah Anda bukan pada skip() dan limit(); yang bekerja dengan baik. Masalahnya adalah dengan logika Anda secara keseluruhan; Anda mengulangi semua 39 koleksi di loop pertama dan kemudian menambahkan setiap hasil agregasi ke cursor_list .

Saya tidak dapat memahami logika dari apa yang Anda coba lakukan, karena contoh pertama adalah mencari di kumpulan kata dan yang kedua mencari di semua kumpulan untuk bidang kata; dengan itu, Anda mungkin dapat menyederhanakan pendekatan Anda ke sesuatu seperti:

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 untuk mencerminkan komentar. Contoh fungsi yang berfungsi penuh untuk melakukan ini. Tidak perlu kueri agregasi - ini menambah kerumitan.

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. Kueri Bersarang MongoDB Hanya Mengembalikan Hasil Terakhir yang Terjadi

  2. Menyimpan pohon direktori dalam dalam database

  3. Membuat metode untuk memperbarui &menyimpan dokumen dengan luwak?

  4. saya perlu sbt 0.11.2 untuk membangun aplikasi mongo auth untuk lift

  5. Mengisi hanya bidang tertentu di luwak