mongoDB聚合查询实现

本文介绍了在遇到大量数据查询性能问题时,如何从PostgreSQL迁移到MongoDB以提高查询效率。通过一个实际场景,详细讲解了如何设计数据结构以避免联表查询,并重点阐述了MongoDB的聚合查询,包括分页、模糊查询、分组等功能,以及聚合管道的工作原理。文中还提到了Studio 3T工具在构建和调试聚合查询语句中的作用,以帮助开发者更高效地完成查询任务。
摘要由CSDN通过智能技术生成

mongo简介

百度百科上的介绍:MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。MongoDB 将数据存储为一个文档,数据结构由键(key=>value)对组成。MongoDB 文档类似于 JSON 对象。字段值可以包含其他文档,数组及文档数组。

为啥用捏

其实还是因为之前做的一个功能,涉及到的数据量比较大,存在数据库中用sql查询执行起来很慢很慢,优化之后还是很慢。具体可以参考我写的那篇sql优化的文章,是的~大概半年前的一个功能了,由于优先级是最低的,所以到现在才去优化和总结,我是有够懒的啦。不过最后还是做了,成功将数据从pg转到mongo了,在实现复杂查询的时候也是费了一下小劲呢,所以总结下来供以后来回顾一下。

正题

之前的业务数据存入数据库之后还要关联其他的表去做一个关联查询,由于也没打算把那些数据再放mongo里面一份,所以设计数据结构的时候也就把关联的字段在代码中处理了一下全都放到一个json里面了。差不多就那样子,这样就不需要设计联表查询,只需要对这个collection进行操作就行啦。

{
    
    "_id" : NumberInt(2), 
    "id" : NumberInt(2), 
    "cameraName" : "测试点", //设备名称
    "clientIp" : "0.0.0.0", 
    "endTime" : NumberLong(20191217102949), 
    "status" : NumberInt(2), //取流状态  0:正在取流 2 取流结束 1  取流异常
    "retrivalDuration" : NumberLong(200), 
    "createTime" : "2020-02-18 16:46:27", 
    "provinceCode" : "360112", //行政区划编码
    "eurl" : "rtsp://10.5.160.103:655/Eurl/qEPs1Km", //短连接
    "longurls" :"rtsp://10.17.10.21:655/0", 
    "clientType" : "BROWSER", //客户端类型
    "cascadeType" : NumberInt(0),  //("所属域 0:本级  1:下级  2:上级 3:中间") 
    "userId" : "test", 
    "playType" : "playback", //playback ,realplay 播放类型
    "startTime" : NumberLong(20191217102749), 
    "upCascadeIndexCode" : "36010000002000000088", //上级域编号,
    "downCascadeIndexCode" : "36010000002000000088", //下级域编号
    "cameraIndexCode" : "36011240201310084354", //点位编号
    "sessionId" : "21312xada", //会话id
    "mediaIndexCode" : "3601124020131002321", //媒体编号
    "msgType" : NumberInt(0
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值