0

ドキュメント place_names にフィールドがあり、場所のすべての可能な場所名のリストです。例 New York City with have New York City, NYC, big apple など。ユーザーがこれらの値のいずれか、または上記の値の任意の部分を照会できるようにしたいと考えています。たとえば、彼らが「リンゴ」を検索した場合、ニューヨーク市を取り戻してほしいと思います。以下のようにmongoengineで__containsフィルターを使用しようとしていました

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」を使用することは可能ですか? そうでない場合、これを回避する方法はありますか?ありがとう :)

4

1 に答える 1

2

__contains内部で正規表現を使用した文字列ルックアップです。アイテムがリストフィールドにあるかどうかを確認するには、__inただし、完全に一致するものを使用する必要があります。

非正規化しListFieldて、地名を1つの単語に分割し、小文字で作成して__inから、一致するものがあるかどうかを判断するために使用できます。

于 2012-01-30T08:40:16.677 に答える