mongoengine - 在单个查询的单个字段上按 "OR" 过滤
mongoengine - filter by "OR" on a single field in a single query
这是我正在寻找的(非常)粗略的示例 - 给定具有以下架构的文档:
from mongoengine import Document, StringField, DateTimeField
class Client(Document):
name = StringField()
activated_on = DateTimeField(required=False)
我将如何查询某个时间点之前从未激活或激活的客户端?
换句话说,如果我搜索没有激活日期或发生在 2016 年 7 月 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)
但是如何将它们组合成一个查询?
您可以使用 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)))
这是我正在寻找的(非常)粗略的示例 - 给定具有以下架构的文档:
from mongoengine import Document, StringField, DateTimeField
class Client(Document):
name = StringField()
activated_on = DateTimeField(required=False)
我将如何查询某个时间点之前从未激活或激活的客户端?
换句话说,如果我搜索没有激活日期或发生在 2016 年 7 月 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)
但是如何将它们组合成一个查询?
您可以使用 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)))