目标:
我希望允许用户按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)
)
错误:
<Whatever you searched for> is not a valid ObjectId
答案 0 :(得分:3)
s_term
传递给ObjectId
构造函数时,
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)
)
必须是有效的对象ID(或者至少是正确的格式)。由于它有时不是ID,这就解释了为什么你会得到例外。
尝试这样的事情:
{{1}}