In pymongo di MongoDB, come faccio a fare un conteggio ()?
Domanda
for post in db.datasets.find({"test_set":"abc"}).sort("abc",pymongo.DESCENDING).skip((page-1)*num).limit(num):
Questo è il mio codice corrente.
Come faccio ad avere il conteggio ()?
Soluzione
Se si utilizza la versione 3.7.0 pymongo o superiore, vedere questa risposta .
Se si desidera results_count
ignorare il vostro limit()
:
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:
Se si desidera che il results_count
da tappare a vostra limit()
, set applySkipLimit
a True
:
results = db.datasets.find({"test_set":"abc"}).sort("abc",pymongo.DESCENDING).skip((page-1)*num).limit(num)
results_count = results.count(True)
for post in results:
Altri suggerimenti
Non certo perché si desidera che il conteggio se sei già passando limite 'num'. In ogni caso, se si vuole affermare, ecco cosa si dovrebbe fare.
results = db.datasets.find({"test_set":"abc"}).sort("abc",pymongo.DESCENDING).skip((page-1)*num).limit(num)
results_count = results.count(True)
che abbinerà results_count con num
Dal pymongo versione 3.7.0 e superiori count () è deprecato . Utilizzare invece Collection.count_documents
. cursor.count
o collection.count
esecuzione comporterà seguente messaggio di avviso:
DeprecationWarning: count is deprecated. Use Collection.count_documents instead.
Per uso count_documents
il codice può essere regolato come segue
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
Nota: Metodo count_documents
esegue relativamente lento rispetto al metodo di count
. Al fine di ottimizzare è possibile utilizzare collection.estimated_document_count
. Questo metodo restituirà stima del numero di documenti (come il nome suggerisce) in base ai metadati di raccolta.