0

目标

我希望允许用户按 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

4

1 回答 1

3

s_termObjectId当您将其传递给构造函数时,它必须是有效的对象 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)
)
于 2011-07-29T20:25:20.133 回答