Python 在Mongo中搜索匹配的ID或属性
目标:Python 在Mongo中搜索匹配的ID或属性,python,mongodb,pymongo,Python,Mongodb,Pymongo,目标: l_search_results = list( cll_sips.find( { '$or': [ {'_id': ObjectId(s_term)}, {'s_text': re.compile(s_term, re.IGNORECASE)}, {'choices': re.compile(s_term, re.IGNORECASE)}
l_search_results = list(
cll_sips.find(
{
'$or': [
{'_id': ObjectId(s_term)},
{'s_text': re.compile(s_term, re.IGNORECASE)},
{'choices': re.compile(s_term, re.IGNORECASE)}
]
}
).limit(20)
)
我希望允许用户按ID搜索文档,或允许其他基于文本的查询
代码:
l_search_results = list(
cll_sips.find(
{
'$or': [
{'_id': ObjectId(s_term)},
{'s_text': re.compile(s_term, re.IGNORECASE)},
{'choices': re.compile(s_term, re.IGNORECASE)}
]
}
).limit(20)
)
错误:
l_search_results = list(
cll_sips.find(
{
'$or': [
{'_id': ObjectId(s_term)},
{'s_text': re.compile(s_term, re.IGNORECASE)},
{'choices': re.compile(s_term, re.IGNORECASE)}
]
}
).limit(20)
)
不是有效的ObjectId
s\u term
在传递给ObjectId
构造函数时需要是有效的对象ID(或至少格式正确)。因为它有时不是ID,这就解释了为什么会出现异常
请尝试以下方法:
from pymongo.errors import InvalidId
or_filter = [
{'s_text': re.compile(s_term, re.IGNORECASE)},
{'choices': re.compile(s_term, re.IGNORECASE)}
]
try:
id = ObjectId(s_term)
or_filter.append({ '_id': id })
except InvalidId:
pass
l_search_results = list(
cll_sips.find({ '$or': or_filter }).limit(20)
)
s_term
传递给ObjectId
构造函数时,它必须是有效的对象ID(或至少格式正确)。因为它有时不是ID,这就解释了为什么会出现异常
请尝试以下方法:
from pymongo.errors import InvalidId
or_filter = [
{'s_text': re.compile(s_term, re.IGNORECASE)},
{'choices': re.compile(s_term, re.IGNORECASE)}
]
try:
id = ObjectId(s_term)
or_filter.append({ '_id': id })
except InvalidId:
pass
l_search_results = list(
cll_sips.find({ '$or': or_filter }).limit(20)
)