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(),设置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:
Run Code Online (Sandbox Code Playgroud)
如果你已经通过限制'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_count与num匹配
由于pymongo版本3.7.0及更高版本,不建议使用count()。改为使用Collection.count_documents。运行cursor.count或collection.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_documents与count方法相比,方法执行速度相对较慢。为了优化您可以使用collection.estimated_document_count。此方法将根据集合元数据返回估计的文档数量(如名称所示)。
如果您想要集合中的所有记录计数(没有任何过滤器),请使用以下命令:
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)