首页 > 解决方案 > 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(),因为它将返回一个整数而不是我可以循环的结果列表;在这种情况下,我将不得不进行两个查询:一个用于计数,一个用于检索结果,我想避免这种情况。有什么办法可以做到这一点,或者我只能使用一个已弃用的功能吗?

标签: pythonmongodbpymongo

解决方案


在 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))


推荐阅读