在Mongo中搜索ID或属性以进行匹配

时间:2011-07-29 18:13:13

标签: python mongodb pymongo

目标

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

1 个答案:

答案 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}}