Frage

for post in db.datasets.find({"test_set":"abc"}).sort("abc",pymongo.DESCENDING).skip((page-1)*num).limit(num):

Dies ist mein aktueller Code.

Wie erhalte ich die count ()?

War es hilfreich?

Lösung

Wenn Sie mit pymongo Version 3.7.0 oder höher, diese Antwort sehen statt.


Wenn Sie möchten, dass Ihre results_count limit() ignorieren:

results = db.datasets.find({"test_set":"abc"}).sort("abc",pymongo.DESCENDING).skip((page-1)*num).limit(num)
results_count = results.count()

for post in results:

Wenn Sie die results_count wollen an Ihrem limit() gekappt werden,

Andere Tipps

Nicht sicher, warum Sie die Zählung wollen, wenn Sie bereits Limit ‚num‘ sind vorbei. Wie auch immer, wenn Sie behaupten wollen, hier ist das, was Sie tun sollen.

results = db.datasets.find({"test_set":"abc"}).sort("abc",pymongo.DESCENDING).skip((page-1)*num).limit(num)

results_count = results.count(True)

Das wird passen results_count mit num

Da pymongo Version 3.7.0 und höher Collection.count_documents . Laufen cursor.count oder collection.count wird in dieser Warnmeldung:

DeprecationWarning: count is deprecated. Use Collection.count_documents instead.

Um die Verwendung count_documents kann der Code wie folgt angepasst werden

import pymongo

db = pymongo.MongoClient()
col = db[DATABASE][COLLECTION]

filter = {"test_set":"abc"}
sort = [("abc",pymongo.DESCENDING)]
skip = 10
limit = 10

doc_count = col.count_documents(filter, skip=skip)
results = col.find(filter).sort(sort).skip(skip).limit(limit)

for doc in result:
   //Process Document

Hinweis: count_documents Methode führt relativ langsam zu count Verfahren verglichen. Um zu optimieren Sie verwenden können, collection.estimated_document_count . Diese Methode wird geschätzte Anzahl der Dokumente zurückgeben (wie der Name schon sagt), basierend auf Sammlung von Metadaten.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top