在MongoDB的pymongo中,我如何进行count()?

TIM*_*MEX 25 database count mongodb pymongo

for post in db.datasets.find({"test_set":"abc"}).sort("abc",pymongo.DESCENDING).skip((page-1)*num).limit(num):
Run Code Online (Sandbox Code Playgroud)

这是我目前的代码.

我如何得到计数()?

thi*_*dot 32

如果你想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:
Run Code Online (Sandbox Code Playgroud)

如果你想results_count在你的封顶limit(),设置applySkipLimitTrue:

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:
Run Code Online (Sandbox Code Playgroud)


Non*_*-da 8

如果你已经通过限制'num',不知道为什么你想要计数.无论如何,如果你想断言,这就是你应该做的.

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

results_count = results.count(True)
Run Code Online (Sandbox Code Playgroud)

这将使results_countnum匹配


Soh*_*oqi 8

由于pymongo版本3.7.0及更高版本,不建议使用count()。改为使用Collection.count_documents。运行cursor.countcollection.count将导致以下警告消息:

DeprecationWarning: count is deprecated. Use Collection.count_documents instead.
Run Code Online (Sandbox Code Playgroud)

使用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
Run Code Online (Sandbox Code Playgroud)

注意: count_documentscount方法相比,方法执行速度相对较慢。为了优化您可以使用collection.estimated_document_count。此方法将根据集合元数据返回估计的文档数量(如名称所示)。

  • 对于复制粘贴者,使用变量名称“filter”将重新定义Python“filter”函数,可能会导致代码出现意外行为 (5认同)
  • 这是一个令人烦恼的变化。现在,您不需要发出 find 请求,然后对结果 Cursor 进行“.count”操作,而是需要进行两次调用,一次调用来运行 count_documents,一次调用来获取实际结果。对于复杂的过滤器来说,这似乎很浪费(我不知道实际上是否如此)。对于小型结果集,“len(list(cursor))”可以工作,但对于大型结果集,这将是一个糟糕的主意...... (3认同)

Muk*_*rma 5

如果您想要集合中的所有记录计数(没有任何过滤器),请使用以下命令:

from pymongo import MongoClient
cl = pymongo.MongoClient(host="localhost", port=27017)
db = cl["database_name"]
print(db.get_collection("collection_name").estimated_document_count())
Run Code Online (Sandbox Code Playgroud)