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 ()?

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top