如何在 pymongo 的 delete_many() 中使用 "hint" 参数

How to use "hint" parameter with pymongo's delete_many()

Per 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参数?我们这里做错了什么?

这对我来说很好。

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}