pymongo sort und find_one ein Problem

8

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

    
Krishna 09.04.2012, 20:06
quelle

4 Antworten

9

In Ihrer ersten Abfrage übergeben Sie in der Sortierfunktion ein Argument ("position,pymongo.DESCENDING") , wenn Sie zwei Argumente ("position", pymongo.DESCENDING) übergeben sollen.

Achten Sie auf Ihre Anführungszeichen.

    
vanev_ 27.12.2012 15:59
quelle
2

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.

    
luke14free 09.04.2012 20:31
quelle
0

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!

    
kilokahn 04.02.2018 11:19
quelle
-1

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]

    
Eugenio Respaldiza 30.09.2016 00:20
quelle

Tags und Links