/ / Abrufen eines Feldes aus einem Dokument über Mongoengine - Python, Performance, Mongodb, Mongoengine

Ein Feld aus einem Dokument über Mongoengine erhalten - Python, Performance, Mongodb, Mongoengine

Ich habe eine Ortssammlung, von der ich warversuche, die Ortsnamen zu extrahieren, um sie dem Benutzer vorzuschlagen, aber es braucht viel Zeit. Ich würde gerne wissen, ob es Möglichkeiten zur Optimierung gibt. Ich verwende mongoengine ORM und die Datenbank ist mongodb.

Abfrage:

results = Place.objects(name__istartswith=query).only("name")

Die Abfrage dauert in Bezug auf Mikrosekunden sehr viel weniger Zeit.

aber jetzt, wenn ich versuche, auf die Namen von den Resultaten zurückzugreifen

names = [result.name for result in results]

Diese Zeile dauert sehr lange, variiert von 3 bis 5 Sekunden, für eine Liste mit einer Länge von etwa 2500.

Ich habe es versucht scalar, aber jetzt nimmt die Zeit zu, wenn ich eine Vereinigung über eine andere Liste mache.

Gibt es eine bessere Möglichkeit, auf die Namensliste zuzugreifen?

Antworten:

0 für die Antwort № 1

Ein Abfragesatz wird erst dann bearbeitet, wenn er iteriert wird results = Place.objects(name=query).only("name") Gibt einen Abfragesatz zurück, der noch nicht aufgerufen wurde. Wenn Sie ihn wiederholen, wird die Abfrage ausgeführt und die Daten werden über die Leitung gesendet.

Ist die Abfrage bei der Ausführung über Pymongo langsam? Da Sie sie nicht benötigen, versuchen Sie es mit MongoEngine-Objekten as_pymongo - was rohe Wörterbücher zurückgibt.

Andere Hinweise sind, um sicherzustellen, dass die Abfrage - unter Verwendung eines Index - performant ist Profiler Dokumente