for post in db.datasets.find({"test_set":"abc"}).sort("abc",pymongo.DESCENDING).skip((page-1)*num).limit(num):
这是我目前的代码。
我如何得到计数()?
答案 0 :(得分:26)
如果你正在使用pymongo版本3.7.0或更高版本,而不是see this answer。
如果您希望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()
,set applySkipLimit
to 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:
答案 1 :(得分:8)
如果您已经通过限制'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
匹配答案 2 :(得分:5)
自pymongo 3.7.0及更高版本count() is deprecated起。而是使用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
。此方法将根据集合元数据返回估计的文档数量(如名称所示)。
答案 3 :(得分:0)
在我的情况下,该操作依赖于给定查询的匹配元素计数,并且肯定不会重复两次此查询:
一个获取计数,并且
两个以获取结果集。
不可能
我知道查询结果集不是很大并且适合内存,因此,我可以将其转换为列表,并获取列表长度。
此代码说明了用例:
if (!Regex.IsMatch(enteredOperation, "^(?=.*\\+).{1}$ || ^(?=.*\\-).{1}$ || ^(?=.*\\*).{1}$ || ^(?=.*\\/).{1}$"))
{
Console.WriteLine("Please restart the program and enter one of the symbols + - * / for the operation you want to complete");
break;
}
答案 4 :(得分:0)
无法对@Sohaib Farooqi 的回答发表不幸的评论...快速说明:虽然 cursor.count()
已被弃用,但在我所有的测试中,它比 collection.count_documents()
快得多,计算所有集合中的文档(即 filter={})。在 shell 中运行 db.currentOp()
会发现 collection.count_documents()
使用聚合管道,而 cursor.count()
没有。这可能是一个原因。