2016-07-08 14 views
1

ich auf einem Raspberry Pi Projekt gerade arbeite, die Wettermessungen und speichert sie in einer Datenbank Mongo wie diese sammelt:Abrufen letzte Dokument in einem MongoDB mit Pymongo und Flask

{ 
    "_id": { 
     "$oid": "577975c874fece5775117209" 
    }, 
    "timestamp": { 
     "$date": "2016-07-03T20:30:00.995Z" 
    }, 
    "temp_f": 68.9, 
    "temp_c": 20.5, 
    "humidity": 50, 
    "pressure": 29.5 
} 

Die Daten in den Mongo wird db geht es gut. Als nächstes versuche ich ein Flask-basiertes Dashboard zu erstellen, mit dem ich die aufgezeichneten Daten betrachten kann. Auf einer der Seiten des Dashboards möchte ich die aktuellen aufgezeichneten Werte anzeigen. Daher muss ich die letzte Messung herausziehen und sie an eine Kolbenvorlage übergeben, um sie im Browser zu rendern.

Ich fand hier ein Beitrag, die ich verwenden könnte:

data = db.measurements.find().limit(1).sort({"$natural": -1}) 

aber natürlich scheint keine gültige Option für den Aufruf von find zu sein.

Dies funktioniert:

measurement = mongo.db.measurements.find_one() 

Es zieht sich zurück eine Zufallsmessung, die ich dann in den Kolben Vorlage passieren kann, aber wie verwende ich sortieren die jüngste zu bekommen?

Ich habe versucht:

measurement = mongo.db.measurements.find_one().sort([("timestamp", -1)]) 

aber das erzeugt ein Attribut Fehler: AttributeError: 'dict' object has no attribute 'sort'

ich auch versucht habe:

cursor = mongo.db.measurements.find().limit(1).sort({"timestamp": -1}) 

aber das funktioniert auch nicht.

Ich vermisse hier etwas, kann jemand mir eine schnelle, vollständige Lösung dafür geben?

Antwort

0

Es stellt sich heraus, Pymongo hat ein anderes Format für die Sortierung. Sie können kein JSON-Objekt übergeben, Sie müssen ein Diktat verwenden. Sobald ich das behoben habe, funktioniert alles:

cursor = mongo.db.measurements.find().sort([('timestamp', -1)]).limit(1) 
Verwandte Themen