【问题标题】:Warning message in PyMongo: count is deprecatedPyMongo 中的警告消息:不推荐使用计数
【发布时间】:2019-10-11 16:29:56
【问题描述】:
def post(self):
    if db.users.find({"email": email}).count() != 0:
        abort(400, message="email is alread used.")

弃用警告:计数已弃用。请改用 Collection.count_documents。

我正在使用 Python-Flask 和 PyMongo 包制作身份验证服务器。每次调用post() 方法时,都会显示上述弃用警告消息。

def post(self):
    if db.users.find({"email": email}).count_documents() != 0:
        abort(400, message="email is alread used.")

但是,如果我将count() 更改为count_documents(),则会出现以下错误消息。

AttributeError: 'Cursor' 对象没有属性 'count_documents'

在调用find() 后如何正确调用count_documents()

【问题讨论】:

    标签: mongodb


    【解决方案1】:

    方法count_documentscollection 的一部分,而不是cursorfind 返回一个游标)。 请参阅the PyMongo documentation regarding the method 了解更多信息和有关某些运算符的说明。

    def post(self):
        if db.users.count_documents({"email": email}) != 0:
            abort(400, message="email is alread used.")
    

    【讨论】:

    • 那为什么在不必要地使用光标计数时会发出警告?
    • 它是否会检索两次数据(即在数据库上使用大量 I/O),一次为游标获取数据,一次为计数获取数据?跨度>
    • 请注意,count_documents 至少需要{} 作为第一个参数
    【解决方案2】:
    change  : print(db.find("ut", {}).count())
    to : print(db.count_documents("ut", {}))
    

    它报告: “数据库”对象没有属性“count_documents”

    如何解决?

    【讨论】:

    • count_documents 是集合的属性,而不是数据库的属性。尝试 - db.ut.count_documents({}) 解决此问题。
    猜你喜欢
    • 2021-09-29
    • 1970-01-01
    • 2020-01-31
    • 2021-08-09
    • 2020-05-14
    • 1970-01-01
    • 2020-02-23
    • 2019-09-21
    • 2016-09-19
    相关资源
    最近更新 更多