我需要在 Mongo 数据库中查询具有以列表中任何前缀开头的特定属性的元素。现在我有一段这样的代码:
query = mymodel(terms__term__in=query_terms)
并且这会匹配在列表“term”上有一个项目的对象,该列表中的 StringField“term” 显式出现在列表“query_terms”上。我想要实现的是让对象在列表“terms”上有一个项目,该项目具有以列表“query_terms”上出现的任何前缀开头的 StringField“term”。是否可以在一个查询中完成此操作,而不需要在数据库中存储“term”的每个可能的前缀?
EDIT:下面的解决方案效果很好,但现在我必须找到具有以列表中每个前缀开头的术语的对象。我变了
query = reduce(lambda q1, q2: q1.__or__(q2),
map(lambda prefix: Q(terms__term__startswith=prefix)))
to
query = reduce(lambda q1, q2: q1.__and__(q2),
map(lambda prefix: Q(terms__term__startswith=prefix)))
但这不起作用。我最终收到以下错误:
InvalidQueryError: Duplicate query conditions: terms__term__startswith
有任何想法吗?
如果您查询一个术语的值,您可以过滤以前缀开头的值,如下所示:
MyModel.objects.filter(terms__term__startswith='foo')
如果您需要过滤多个前缀,则必须为此创建 Q 对象:
MyModel.objects.filter(Q(terms__term__startswith='foo') | Q(terms__term__startswith='bar'))
如果您需要动态创建查询:
prefixes = ['foo', 'bar', 'baz']
query = reduce(lambda q1, q2: q1.__or__(q2),
map(lambda prefix: Q(terms__term__startswith=prefix), prefixes))
MyModel.objects.filter(query)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)