资讯专栏INFORMATION COLUMN

Python MongoDB 一些聚合查询方法

233jl / 3094人阅读

摘要:的聚合查询语法一直让我难以很好的入门,如果不是因为项目需要,我很少会用到它,但是用多了之后,会越来越喜欢它,尤其是接触了一些聚合查询方法后,我发现真的在业务中提高了不少效率。

MongoDB 的聚合查询语法一直让我难以很好的入门,如果不是因为项目需要,我很少会用到它,但是用多了之后,会越来越喜欢它,尤其是接触了一些聚合查询方法后,我发现 MongoDB 真的在业务中提高了不少效率。总之,MongoDB 真香~~~

下面是我的一些平时使用聚合查询的记录

data 集合数据格式

{
    "_id" : ObjectId("5caef7f2c0cd2730919a038f"),
    "sn" : "1904010010000001",
    "dev_id" : 200,
    "dt" : ISODate("2036-02-07T14:29:00.000Z"),
    "data" : {
        "BT" : 20.0,
        "CSQ" : 23,
        "GPSLati" : 39.8679244,
        "GPSLongti" : 116.6568387,
        "Humidity" : 0.0,
        "Temprature" : 0.0,
        "Voltage" : 0.0
    }
}
查询所有 sn 下的最新一条数据
sn = ["1904010010000001", "1904010010000002", "1904010010000003"]
pipeline = [
    {"$match": {"sn": {"$in": sn}}},
    {"$group": {"_id": "$sn", "data": {"$last": "$data"}, "dt": {"$last": "$dt"}}},
    {"$sort": {"dt": 1}}]

db.data.aggregate(pipeline)

返回结果(避免数据过长,仅显示一个数据)

[
    {
        "_id": "1812010009000100",
        "data": {
            "Ap": 1009.7, "BT": 20.0, "CSQ": 24, 
            "GPSLati": 39.8681678, "GPSLongti": 116.6591262, 
            "Humidity": 31.400000000000002, "Temprature": 21.5, 
            "Voltage": 0.98, "WindDir": 0, "WindSpeed": 0.0
        }, 
        "dt": datetime.datetime(2019, 4, 14, 17, 44)
    }
]
查询某个 sn 10 小时内每隔 10 分钟统计的平均值
sn = "1904010010000001"
pipeline = [
    {"$project": {"date": {"$substr": ["$dt", 0, 15]}, "data": "$data"}},
    {"$group": {
        "_id": "$date",
        "temprature": {"$avg": "$data.Temprature"},
        "humidity": {"$avg": "$data.Humidity"},
        "wind_speed": {"$avg": "$data.WindSpeed"},
        "wind_dir": {"$avg": "$data.WindDir"}
    }},
    {"$limit": 60},
    {"$sort": {"_id": -1}}
]

db.data.aggregate(pipeline)

返回结果(避免数据过长,仅显示一个数据)

[
    {
        "_id": "2019-04-14T01:3", 
        "temprature": 10.861538461538462, 
        "humidity": 18.70769230769231, 
        "wind_speed": 0.49230769230769234, 
        "wind_dir": 167.6153846153846
    }
]

原文地址: Python MongoDB 一些聚合查询方法
我的博客: 时空路由器

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/19499.html

相关文章

  • Python MongoDB 一些聚合查询方法

    摘要:的聚合查询语法一直让我难以很好的入门,如果不是因为项目需要,我很少会用到它,但是用多了之后,会越来越喜欢它,尤其是接触了一些聚合查询方法后,我发现真的在业务中提高了不少效率。 MongoDB 的聚合查询语法一直让我难以很好的入门,如果不是因为项目需要,我很少会用到它,但是用多了之后,会越来越喜欢它,尤其是接触了一些聚合查询方法后,我发现 MongoDB 真的在业务中提高了不少效率。总之...

    curlyCheng 评论0 收藏0
  • MongoDB 资源、库、工具、应用程序精选列表中文版

    摘要:推荐阅读资源库工具应用程序精选列表中文版有哪些鲜为人知,但是很有意思的网站一份攻城狮笔记每天搜集上优秀的项目一些有趣的民间故事超好用的谷歌浏览器油猴插件合集目录资源文档文章图书会谈教程更多库工具管理数据部署桌面发展监控应用资源文档介绍文档教 推荐阅读 MongoDB 资源、库、工具、应用程序精选列表中文版 有哪些鲜为人知,但是很有意思的网站? 一份攻城狮笔记 每天搜集 Github ...

    e10101 评论0 收藏0
  • 经验拾忆(纯手工)=> MongoDB与PyMongo语法对比解析

    摘要:举个栗子你有一个箱子,里面有一个儿子级别和孙子级别的箱子共层现在你把孙子级别的箱子单独拿出来,把整个箱子替换掉就是这种思想。。。自己体会吧这种语法,好像列表的切片赋值。。官方建议我们用它的好处是把和由两个函数调用变为个参数传进去了。 阅读须知 由于是对比书写: M: 代表 Mongo原生语法 P: 代表 PyMongo书写方法 后面提到:同上 字眼: ...

    mo0n1andin 评论0 收藏0
  • 数据工程师妹子养成手记——数据库篇

    摘要:是什么呀是一个和不太一样的数据库。怀疑是同时联了四个集合的数据造成的。这本书的定位是和的应用,所以有意弱化了数据库的搭建维护和底层优化。所以本书可能不适合数据库工程师。 这篇文章没有代码,请放心阅读。 程序员最宝贵的东西是生命,生命属于程序员只有一次。一个程序员的一生应该这样度过:当她回首往事的时候,她不会因为搭建环境浪费时间而悔恨,也不会因为集群无法运行而羞耻。这样,在她开发的时候,...

    yexiaobai 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<