Ich muss überprüfen, ob eine find
-Anweisung eine nicht leere Abfrage zurückgibt.Wie überprüft man, ob ein Pymongo-Cursor Abfrageergebnisse hat
Was war ich tat folgendes:
query = collection.find({"string": field})
if not query: #do something
Dann wurde mir klar, dass meine if
Anweisung nie ausgeführt wurde, weil find
einen Cursor zurückgibt, entweder die Abfrage leer ist oder nicht.
Deshalb überprüfte ich die documentation und ich finde zwei Methoden, die mir helfen können:
count(with_limit_and_skip=False)
, die (aus der Beschreibung):die Anzahl der Dokumente in den Ergebnissen Kosten festgelegt für diese Abfrage.
Es scheint ein guter Weg, um zu überprüfen, aber das bedeutet, dass ich alle Ergebnisse in Cursor zählen müssen wissen, ob es Null ist oder nicht, nicht wahr? Ein bisschen teuer?
retrieved
, die (aus der Beschreibung):Die Anzahl der Dokumente bisher abgerufen.
ich es auf einem leeren Abfragesatz getestet und es gibt Null zurück, aber es ist nicht klar, was es tut, und ich weiß nicht, ob es das Richtige für mich ist.
Also, was ist der beste Weg (best practice) zu überprüfen, ob eine find()
Abfrage eine leere Menge oder nicht zurückkehrt? Ist eine der oben beschriebenen Methoden zu diesem Zweck richtig? Und was ist mit Leistung? Gibt es andere Möglichkeiten, es zu tun?
Nur um klar zu sein: Ich muß, wenn die Abfrage leer wissen ist, und ich mag den besten Weg, mit dem Cursor in Bezug auf Leistung finden und pythonic zu sein.
Das hängt davon ab, was Sie mit ihm tun möchte –
@VincentBeltman ich gerade brauchen zu wissen, ob die Abfrage mit diesem Cursor etwas zurückgibt. – boh
Sie führen die Abfrage ohnehin in Ihrer collection.find() -Methode durch. Die "count" -Methode gibt nur die Anzahl der Dokumente zurück, die die find-Methode an den Cursor zurückgegeben hat. Sie würden nur tun "wenn query.count> 0:" – vintastic