2016-07-22 52 views
0

这里有一个什么我要找的(真正)粗糙的例子 - 给出了以下模式的文档:mongoengine - 通过过滤器“或”在一个单一的查询单场

from mongoengine import Document, StringField, DateTimeField 

class Client(Document): 
    name = StringField() 
    activated_on = DateTimeField(required=False) 

会如何我查询它是否在某个时间点之前从未激活或激活过的客户端?

换句话说,如果我搜索没有激活日期的条目或2016-07-22之前发生的条目,则两个文档都会显示在结果中。

{ "name": "Bob Lawbla" } 
{ "name": "Gerry Mander", "activated_on": 2016-07-01T00:00:00 } 

我知道我可以做:

Client.objects(activated_on__lte=datetime.datetime(2016,7,22)) 

Client.objects(activated_on__exists=False) 

但我怎么将它们合并成一个查询?

回答

0

您可以使用Q class

from mongoengine.queryset.visitor import Q as MQ 

Client.objects(MQ(activated_on__exists=False)|MQ(activated_on__lte=datetime.datetime(2016,7,22))) 
+0

伟大的工作 - 谢谢! – lps