使用Pymongo和Flask检索MongoDB中的最后一个文档

joh*_*rgo 4 mongodb pymongo

我正在一个Raspberry Pi项目上,该项目收集天气测量值并将其存储在Mongo数据库中,如下所示:

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

数据正好进入Mongo数据库。接下来,我试图构建一个基于Flask的仪表板,使我能够查看记录的数据。在仪表板的其中一个页面上,我想显示当前记录的值,因此我需要做的是提取上一次测量并将其传递给flask模板以呈现到浏览器。

我在这里找到了可以使用的帖子:

data = db.measurements.find().limit(1).sort({"$natural": -1})
Run Code Online (Sandbox Code Playgroud)

但是自然调用似乎并不是有效的选择find

这有效:

measurement = mongo.db.measurements.find_one()
Run Code Online (Sandbox Code Playgroud)

它拉回了一个随机测量值,然后我可以将其传递给烧瓶模板,但是如何使用sort获得最新的测量值?

我试过了:

measurement = mongo.db.measurements.find_one().sort([("timestamp", -1)])
Run Code Online (Sandbox Code Playgroud)

但这会产生属性错误: AttributeError: 'dict' object has no attribute 'sort'

我也尝试过:

cursor = mongo.db.measurements.find().limit(1).sort({"timestamp": -1})
Run Code Online (Sandbox Code Playgroud)

但这也不起作用。

我在这里缺少什么,有人可以给我快速,完整的解决方法吗?

joh*_*rgo 8

事实证明,Pymongo具有不同的排序格式。您不能传递JSON对象,而必须使用字典。一旦我解决了,所有的工作就可以了:

cursor = mongo.db.measurements.find().sort([('timestamp', -1)]).limit(1)
Run Code Online (Sandbox Code Playgroud)