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

时间:2016-07-08 14:14:56

标签: 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
}

数据进入Mongo数据库就好了。接下来,我正在尝试构建一个基于Flask的仪表板,使我能够查看记录的数据。在仪表板的其中一个页面上,我想显示当前记录的值,因此我需要做的是取出最后一个测量并将其传递给一个烧瓶模板以便渲染到浏览器。

我发现这里的帖子说我可以使用:

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

但自然似乎不是调用find的有效选项。

这有效:

measurement = mongo.db.measurements.find_one()

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

我试过了:

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

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

我也试过了:

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

但这也不起作用。

我在这里遗漏了一些东西,有人可以给我一个快速,完整的解决方法吗?

1 个答案:

答案 0 :(得分:7)

事实证明,Pymongo有不同的排序格式。你不能传入一个JSON对象,你必须使用一个dict。一旦我解决了这个问题,一切正常:

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