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)))