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)
)