2011-07-29 59 views
0

目標搜索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) 
) 

錯誤

<Whatever you searched for> is not a valid ObjectId

回答

3

s_term需要是有效的對象ID(或者至少以正確的格式),當將它傳遞到構造函數爲ObjectId。由於它有時不是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) 
) 
+0

完美。謝謝! – Donnie