En pymongo de MongoDB, ¿cómo lo hago un recuento ()?
Pregunta
for post in db.datasets.find({"test_set":"abc"}).sort("abc",pymongo.DESCENDING).skip((page-1)*num).limit(num):
Este es mi código actual.
¿Cómo consigo el conteo ()?
Solución
Si está utilizando la versión 3.7.0 pymongo o superior, ver esta respuesta lugar.
Si desea results_count
ignorar su 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:
Si desea que el results_count
a un tope establecido en su limit()
, conjunto 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:
Otros consejos
No está seguro de qué quiere el recuento si ya está de paso límite 'num'. De todos modos, si usted quiere hacer valer, esto es lo que debe hacer.
results = db.datasets.find({"test_set":"abc"}).sort("abc",pymongo.DESCENDING).skip((page-1)*num).limit(num)
results_count = results.count(True)
Esto coincidirá con results_count num
Desde la versión pymongo 3.7.0 y por encima de count () está en desuso . En lugar de utilizar Collection.count_documents
. Correr cursor.count
o collection.count
resultará en mensaje de advertencia siguiente:
DeprecationWarning: count is deprecated. Use Collection.count_documents instead.
Para uso count_documents
el código se puede ajustar como sigue
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: realiza método count_documents
relativamente lento en comparación con el método count
. Con el fin de optimizar puede utilizar collection.estimated_document_count
. Este método devolverá el número estimado de documentos (como el nombre sugiere) basado en metadatos colección.