【问题标题】:How to use "hint" parameter with pymongo's delete_many()如何在 pymongo 的 delete_many() 中使用“提示”参数
【发布时间】:2021-12-23 13:28:38
【问题描述】:

根据https://pymongo.readthedocs.io/en/stable/api/pymongo/collection.html,对于delete_many(),在 3.11 中添加了提示。我们的 pymongo:

>>> pymongo.__version__
'3.12.1'

我们正在尝试使用此参数来更快地从我们的数据库中删除行:

from pymongo import MongoClient
from pymongo import ASCENDING, DESCENDING, TEXT
import os
MONGO_URI = os.getenv('MONGO_URI')

# connect to db
cluster = MongoClient(MONGO_URI)
db = cluster["cbbap"]

# set function parameter values
our_filter = { 'competitionId': { '$in': [30629, 30630] } }
our_hint = { 'competitionId': 1 } # competitionId is an index in our collection
table_name = 'our_table'

# this line works just fine
db[table_name].delete_many(filter = our_filter)

我们在尝试时遇到了问题

# this line does not work
db[table_name].delete_many(filter = our_filter, hint = our_hint)

返回错误:TypeError: passing a dict to sort/create_index/hint is not allowed - use a list of tuples instead. did you mean [('competitionId', 1)]?

所以我们试试:

# does not work
our_hint = [('competitionId', 1)]
db[table_name].delete_many(filter = our_filter, hint = our_hint)

返回错误:pymongo.errors.OperationFailure: BSON field 'delete.deletes.hint' is an unknown field. 我们也试过了

# does not work
db[table_name].delete_many(filter = our_filter, hint = 'competitionId')

正如文档所说,可以传递一个字符串,但这也不起作用,返回相同的错误pymongo.errors.OperationFailure: BSON field 'delete.deletes.hint' is an unknown field.

我们如何在 pymongo 的 delete_many 函数中使用 hint 参数?我们在这里做错了什么?

【问题讨论】:

    标签: mongodb pymongo


    【解决方案1】:

    这对我来说很好。

    DeleteMany 中的hint 仅支持 MongoDB 4.4 及更高版本。

    @app.get("/delete/{id}")
    async def root(id: int):
        db = get_database()
        our_filter = { 'competitionId': { '$in': [30629, 30630] } }
        our_hint = [('competitionId', 1)]
        c = db['key'].delete_many(filter = our_filter,hint = our_hint)
        return {"message": c.deleted_count}
    

    【讨论】:

    • 这是 python 还是 mongo CLI?我想我可以试试 mongo CLI
    • 我在 python 上用fastapi 试试。确保您的 MongoDB 版本为 4.4 或更高版本。
    • 使用pymongo时是否需要安装mongodb。这个要求有点令人困惑,因为它在文档中说我需要我拥有的 pymongo 3.11+,但我实际上并没有在我们运行此代码的地方安装 mongo,只是 pymongo
    • 是的,你需要安装 mongodb。 pymongo 是使用 Python 与 MongoDB 一起工作的推荐驱动程序。
    • 我们使用 mongodb atlas,我们只有版本 4.2.,所以这就是问题所在......似乎从 4.2 升级到 4.4 不是一个小升级,所以我们暂时推迟.谢谢!
    猜你喜欢
    • 2023-02-10
    • 2013-04-21
    • 2022-11-28
    • 1970-01-01
    • 1970-01-01
    • 2021-01-26
    • 2014-03-01
    • 1970-01-01
    • 2016-11-21
    相关资源
    最近更新 更多