在Mongo中搜索ID或属性匹配
目标:
我想让用户可以通过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)
)
错误:
<你搜索的内容> 不是一个有效的对象ID
1 个回答
3
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)
)