2016-07-22 3 views
0

hier ein (wirklich) grobes Beispiel dafür, was ich suche - gegeben ein Dokument mit folgendem Schema:mongoengine - Filter durch „OR“ auf einem einzelnes Feld in einer einzigen Abfrage

from mongoengine import Document, StringField, DateTimeField 

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

Wie würde Ich frage nach einem Client, der vor einem bestimmten Zeitpunkt nie aktiviert oder aktiviert wurde?

Mit anderen Worten, beide Dokumente würden in den Ergebnissen angezeigt, wenn ich nach Einträgen ohne ein Aktivierungsdatum oder eine vor dem 2016-07-22 aufgetreten suchen.

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

Ich weiß, was ich tun kann:

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

und

Client.objects(activated_on__exists=False) 

aber wie ich sie in einer Abfrage kombinieren?

Antwort

0

können Sie verwenden 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

Arbeitete groß - danke! – lps

Verwandte Themen