我的文档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)
在上面的例子中,过滤器不能按我预期的方式工作。它作为常规过滤器工作,不执行“_ 包含”。如果类型是StringField(),则相同的过滤器可以正常工作。是否可以将“ _contains”与ListFields一起使用?如果没有,有什么方法吗?谢谢:))
答案 0 :(得分:2)
__contains
是一个使用正则表达式的字符串查找。要检查项目是否在列表字段中,您应该使用__in
,但这完全匹配。
您可以对地理名称拆分为单个单词和小写的ListField
进行非规范化并创建__in
,然后您可以使用{{1}}来确定是否存在匹配。