2012-01-29 43 views
0

我在文檔place_names中有一個字段,它是一個位置的所有可能的地名的列表。示例紐約市有紐約市,紐約市,大蘋果等。 我希望用戶能夠查詢任何這些值或上述值的任何部分。 例如,如果他們搜索「蘋果」,我希望他們得到紐約市回來。我試圖使用mongoengine的__contains過濾如下對__contains不起作用的listField上的Mongoengine過濾

PLACE_NAMES的類型是ListField()

pn = request.POST.get('place_name', None) 

try: 
    places_list = Places.objects() 
    if pn is not None and pn != "": 
     places_list.filter(place_names__contains = pn) 

在上面的例子中篩選器不工作,我希望它的方式。它作爲常規過濾器工作,不包含「_ 包含」。如果類型是StringField(),相同的過濾器工作正常。是否可以在ListFields中使用「 _contains」?如果沒有解決這個問題的方法嗎?謝謝:)

回答

2

__contains是在引擎蓋下使用正則表達式的字符串查找。要檢查一個項目是否在列表中,你應該使用__in,但是,它確實匹配。

您可以將地點名稱拆分爲單個單詞和小寫字母,然後使用__in來確定是否存在匹配,從而可以進行非規範化並創建一個ListField

+0

謝謝救了我很多挫折。失望的是,你不能在listField上做一個__contains。噢,好吧 – CodeMonkeyB 2012-01-31 04:53:16

+0

目前在mongoDB中沒有全文搜索 - 你可以在這裏閱讀這裏的方法 - http://www.mongodb.org/display/DOCS/Full+Text+Search+in+Mongo一旦全文被實現核心mongoDB,那麼我們將能夠實現你想要的。你能否將這個問題標記爲未來其他人看待這個問題的答案 – Ross 2012-01-31 09:52:31