In MongoDB der pymongo, wie mache ich einen count ()?
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 ()?
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.