python - MongoDB - 不推荐使用计数
问题描述
我正在做一个 MongoDB 查询,我都需要遍历我的结果并计算结果的 len 以查看我是否返回一个空结果。
这是我尝试过的:
Record = db.mycol.find({"datetimeraw": dt.now().strftime('%Y%m%d%H%M')})
RecordLen = Record.count()
print('LEN IS':RecordLen)
for x in Record:
print(x)
此代码有效,但是当我使用它时,出现以下错误:DeprecationWarning: count is deprecated. Use Collection.count_documents instead.
问题是我无法使用count_documents()
,因为它将返回一个整数而不是我可以循环的结果列表;在这种情况下,我将不得不进行两个查询:一个用于计数,一个用于检索结果,我想避免这种情况。有什么办法可以做到这一点,或者我只能使用一个已弃用的功能吗?
解决方案
在 MongoDB.find()
中将始终返回一个游标,它可以是空的,也可以是[]
文档/字典数组[{},{}]
。
As .count()可以通过三种方式使用:
/** 1. Queries all docs based on filter and then returns no.of docs matches with query */
db.collection.find( { queryFilter } ).count()
/** 2. Returns no.of docs */
db.collection.count()
/** 3. Returns a cursor `results` */
results = db.collection.find( { queryFilter } )
results.count()
因此,前两个选项类似于countdocuments()和estimateddocumentcount()(返回一个数字),但由于您想返回文档并获得类似于cursor.count()的游标计数,那么您可以在代码中使用len()
方法:len(list(results))
。
推荐阅读
- c - 从 .c/.h 源文件中去除尾随空格是否 100% 安全?
- c# - 验证 Web api 控制器是否需要以编程方式授权
- c - 找不到从 linux 入口点交叉编译的 windows curl_easy_cleanup 找不到
- r - R中缺失值的线性插值
- android - ViewModel 可以实现 LifecycleOwner 吗?
- typescript - 自引用类型 - 有可能吗?
- laravel - 为什么我不能将输入请求中的空字符串直接保存到相应的会话变量中?
- python - 查找最大值子数组的索引并将其应用于该子数组
- java - 将 dat 转换为链表
- java - 多次运行测试方法而不使用循环