如何在 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}
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}