0

我的文档 place_names 中有一个字段,它是一个位置的所有可能地名的列表。例如纽约市,有纽约市、纽约市、大苹果等。我希望用户能够查询这些值中的任何一个或上述值的任何部分。例如,如果他们搜索“苹果”,我希望他们返回纽约市。我试图在 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)

在上面的例子中,过滤器没有按照我期望的方式工作。它作为常规过滤器工作,不执行“_ contains”。如果类型是 StringField(),则相同的过滤器可以正常工作。是否可以将“ _contains”与 ListFields 一起使用?如果没有,有没有办法解决这个问题?谢谢 :)

4

1 回答 1

2

__contains是在引擎盖下使用正则表达式的字符串查找。要检查项目是否在列表字段中,您应该使用__in完全匹配的。

ListField您可以将地名拆分为单个单词并小写,然后将其反规范化并创建一个,然后您可以使用它__in来确定是否存在匹配项。

于 2012-01-30T08:40:16.677 回答