Ich versuche, eine Sammlung namens user_score
mit dem Schlüssel position
zu sortieren und das erste Dokument des Ergebnisses zu erhalten. In diesem Fall ist die Sammlung user_score
nicht vorhanden und ich hoffte, das Ergebnis als None
zu erhalten, aber ich bekam einen Cursor zurück.
1. Ergebnis =
%Vor%Nun habe ich meine Abfrage wie folgt geändert und habe nichts erwartet.
2. Ergebnis =
%Vor%Was ist das Problem mit meiner ersten Abfrage?
Danke
Dies ist das Standardmongodb-Verhalten bei der Suche. Immer wenn Sie find
verwenden, erhalten Sie eine Liste des Ergebnisses (in diesem Fall einen iterierbaren Cursor). Nur findOne
- oder sein PyMongo-Äquivalent find_one
gibt None
zurück, wenn die Abfrage keine Übereinstimmung aufweist.
Etwas spät in meiner Antwort, aber es scheint, dass die aktuelle Version von PyMongo eine sort Operation bei einem find_one-Aufruf.
Von der Dokumentationsseite hier (bitte lesen Sie den Abschnitt für find_one):
Alle Argumente zu find () sind auch gültige Argumente für find_one (), obwohl jedes Limit-Argument ignoriert wird. Gibt eine einzelne zurück Dokument oder Keine, wenn kein übereinstimmendes Dokument gefunden wird.
Beispiel Verwendung ist wie folgt:
%Vor%Ich hoffe, das hilft neueren Suchern!
Verwenden Sie die Liste, um den Wert des Cursors in ein dict zu konvertieren:
list(db.user_score.find({'score':'$lt':score}}).sort("position",pymongo.DESCENDING).limit(1))[0]