在Mongo中搜索ID或属性匹配

0 投票
1 回答
2235 浏览
提问于 2025-04-16 22:32

目标:

我想让用户可以通过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)
)

撰写回答