在mongoengine中堆叠多个过滤器查询

时间:2013-09-18 12:29:32

标签: django mongoengine

如何运行以下内容:

someQuerySet.filter(keyword='someKey')
someQuerySet.filter(keyword='someOtherKey')

每当我尝试这样做时,我都会InvalidQueryError: Duplicate query conditions。我知道可以按值列表进行过滤,但是现在,我需要进行单独的过滤。

稍后编辑: 我实际上在用:

someQuerySet.filter(keyword__ne='someKey')
someQuerySet.filter(keyword__ne='someOtherKey')

2 个答案:

答案 0 :(得分:4)

你可以建立像这样的Q对象:

from django.db.models import Q

filters = Q(keyword='someKey')
…
filters = filters | Q(keyword='someOtherKey')

someQuerySet.filter(filters)

这基本上会创建一个WHERE子句,如下所示:WHERE keyword = 'someKey' OR keyword = 'someOtherKey'

我是从记忆中做到这一点,所以如果这不起作用,请告诉我,我会研究一些过去的代码。

答案 1 :(得分:3)

错误的原因是因为默认情况下查询参数为AND。所以你要求的keyword="SomeKey" AND keyword="SomeOtherKey"永远不会是真的。

您可以使用Q个对象:http://docs.mongoengine.org/en/latest/guide/querying.html#advanced-queries或执行$in,其中值与列表中的任何内容匹配,例如:keyword__in=["SomeKey", "SomeOtherKey"]