/ / Wie kann ich mit MongoEngine für Django das QuerySet nach der Größe einer Liste und über einem Wert filtern? - Python, Django, Mongoengine

Wie kann ich mit der MongoEngine für Django den QuerySet nach der Größe einer Liste und nach einem Wert filtern? - Python, Django, Mongoengine

Ich benutze Django 1.6.8 und MongoEngine 0.8.2.

Ich habe 2 Klassen, ServiceDocument und OptionDocument. ServiceDocument führt eine Liste von OptionDocuments. Es gibt Millionen von ServiceDokumenten (über 2,5 Millionen).

Ich möchte jedes ServiceDocument auswählen, das mehr als zwei OptionDocuments enthält.

Ich "möchte", dass dies funktioniert, aber ich bekomme 0 als Ergebnis:

ServiceDocument.objects.filter(options__size__gt=2).count()

Das mache ich zur Arbeit:

>>> ServiceDocument.objects.filter(options__size=1).count()
6582
>>> ServiceDocument.objects.filter(options__size=2).count()
2734321
>>> ServiceDocument.objects.filter(options__size=3).count()
25165
>>> ServiceDocument.objects.all().count()
2769768

Zuletzt, wenn ich weniger ServiceDocuments und / oder ich hatteIch könnte einen Iterator zum Laufen bringen, ich könnte sie einfach selbst durchlaufen, aber nach einigen Sekunden bekomme ich ein paar Fehler.

Für den Iterator habe ich folgendes ohne Erfolg versucht:

iter(ServiceDocument.objects.all())

Antworten:

1 für die Antwort № 1

Nun, ich denke, dass Sie eine Arbeit finden müssenDa dies von Mongoengine nicht unterstützt wird, unterstützt dies Ihre Abfrage nicht. Sie können ein weiteres Feld hinzufügen, sagen Sie "options_length" und speichern Sie die Länge des Optionsfeldes in diesem Feld. Dann können Sie mit "__gt> 2" eine Abfrage durchführen Sie müssen die Modellspeicherfunktion überschreiben, um die Länge bei jedem Speichern zu aktualisieren, und Sie müssen die vorhandenen Datensätze dafür aktualisieren.

Sie können dies auch lesen Frage