Dans pymongo de MongoDB, comment dois-je faire un compte ()?
Question
for post in db.datasets.find({"test_set":"abc"}).sort("abc",pymongo.DESCENDING).skip((page-1)*num).limit(num):
Ceci est mon code actuel.
Comment puis-je obtenir le nombre ()?
La solution
Si vous utilisez la version 3.7.0 ou supérieure pymongo, voir cette réponse à la place.
Si vous voulez results_count
ignorer votre 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 vous voulez que le results_count
à plafonner à votre limit()
,
Autres conseils
Je ne sais pas pourquoi vous voulez le compte si vous limite déjà de passage « num ». Quoi qu'il en soit, si vous voulez assert, voici ce que vous devez faire.
results = db.datasets.find({"test_set":"abc"}).sort("abc",pymongo.DESCENDING).skip((page-1)*num).limit(num)
results_count = results.count(True)
qui correspondent results_count num
Depuis la version 3.7.0 et pymongo ci-dessus Collection.count_documents
. Exécution cursor.count
ou collection.count
entraînera message d'avertissement:
DeprecationWarning: count is deprecated. Use Collection.count_documents instead.
Pour utiliser count_documents
le code peut être modifié comme suit
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
Note: Mode de count_documents
fonctionne comme relativement lente par rapport à la méthode de count
. Afin de vous optimiser pouvez utiliser collection.estimated_document_count
. Cette méthode retourne nombre estimé de documents (comme le nom suggéré) basé sur les métadonnées de collection.