如何使用python从mongodb获取游标的长度?

Wal*_*ace 8 python mongodb pymongo python-2.7

我正在寻找一种可行的方法来获取从MongoDB获得的游标长度.

小智 22

上一个答案的变体:

len(list(cursor.clone()))
Run Code Online (Sandbox Code Playgroud)

不消耗光标


Jér*_*ôme 16

cursor.count方法自 pymongo 3.7 起已弃用。

推荐的方法是使用count_documents集合的方法。

  • 这是否意味着如果您想要在迭代之前进行计数,则必须查询两次 - 一次针对 collection.count_documents() ,另一次针对 collection.find() ? (4认同)
  • 是的。需要在独立查询中调用“count_documents”。`cursor.count` 还发出了一个独立的查询,所以这并不是真正的回归。但是,对于将光标作为输入并需要光标长度的函数来说,这可能是一个问题。必须修改这些函数以将总计作为参数,并且必须相应地修改调用者代码。(也许可以从游标访问集合和查询过滤器,因为它们存储为双下划线属性,但这听起来很糟糕。) (2认同)
  • @Miguel `cursor.collection`? (2认同)

Ski*_*rou 12

其实很简单

len(list(cursor))
Run Code Online (Sandbox Code Playgroud)

请注意,它会消耗游标。

  • 自 2020 年 9 月起,cursor.count() 返回 '''DeprecationWarning:count 已弃用。请改用 Collection.count_documents。''' 当 count_document 返回: '''AttributeError: 'Cursor' 对象没有属性 'count_documents'''' 所以 len(list(cursor)) 效果更好。 (3认同)

Kjj*_*ssy 8

cursor.count()

计算游标引用的文档数.将count()方法附加 到find()查询以返回匹配文档的数量.该操作不执行查询,而是计算查询返回的结果.

db.collection.find(<query>).count()
Run Code Online (Sandbox Code Playgroud)

https://docs.mongodb.com/manual/reference/method/db.collection.count/

  • 从pymongo 3.7开始不推荐使用cursor.count()。看我的答案。 (2认同)

小智 7

len(list(cursor.clone())) 对我来说效果非常好,不消耗编辑器,因此它可以直接与您的变量一起使用