В pymongo MongoDB, как мне сделать подсчет ()? - PullRequest
24 голосов
/ 11 декабря 2010
for post in db.datasets.find({"test_set":"abc"}).sort("abc",pymongo.DESCENDING).skip((page-1)*num).limit(num):

Это мой текущий код.

Как узнать количество ()?

Ответы [ 3 ]

29 голосов
/ 11 декабря 2010

Если вы используете pymongo версии 3.7.0 или выше, см. Этот ответ .


Если вы хотите, чтобы results_count проигнорировал ваш 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:

Если вы хотите, чтобы results_count был ограничен на limit(), установите applySkipLimit на 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:
8 голосов
/ 27 сентября 2012

Не уверен, зачем вам нужен счет, если вы уже проходите лимит 'num'. В любом случае, если вы хотите утверждать, вот что вы должны сделать.

results = db.datasets.find({"test_set":"abc"}).sort("abc",pymongo.DESCENDING).skip((page-1)*num).limit(num)

results_count = results.count(True)

Это будет соответствовать results_count с num

6 голосов
/ 19 февраля 2019

Поскольку версия pymongo 3.7.0 и выше count () устарела .Вместо этого используйте Collection.count_documents.Запуск cursor.count или collection.count приведет к появлению следующего предупреждающего сообщения:

DeprecationWarning: count is deprecated. Use Collection.count_documents instead.

Для использования count_documents код можно настроить следующим образом

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

Примечание:Метод count_documents работает относительно медленно по сравнению с методом count.Для оптимизации вы можете использовать collection.estimated_document_count.Этот метод возвращает приблизительное количество документов (как следует из названия) на основе метаданных коллекции.

...