mongodb 复杂查询之 本表 join
- 利用聚合Pipeline的多次筛选:$match 和 $project
- 利用 groupby + push + unwind,实现了本表的 join 操作
- 利用 unwind 解开了 push
- 利用 project 实现了增加状态位字段, 辅助复杂筛选条件的实现
- 利用 project 进行字段的筛选
- 最终合并同一个合同的数据结果
db.c_engine_col.aggregate(
[
{"$match":{"local_create_time" : {"$gt":"2018-11-10", "$lt":"2018-11-20"}}}, // 筛选条件
{
"$group":{"_id":"$serialno", "maxstep":{"$max":"$stepCode"}, "keys":{"$push":"$$ROOT"}} // 分组计算 maxstep, 并合并所有数据
},
{"$unwind":"$keys"}, // 解开数据
{"$project":{"_id":1, "maxstep":1, "keys.key":1, "keys.serialno":1, "keys.stepCode":1, "keys.value":1, "diff":{"$eq":["$maxstep","$keys.stepCode"]}}}, // 增加状态位
{"$match":{"diff":true}}, // 根据状态位筛选 stepcode==maxstep
{"$project":{"_id":1,"keys.serialno":1 , "keys.key":1, "keys.stepCode":1, "keys.value":1}}, // 提取少量字段
{
"$group":{"_id":"$keys.serialno", "key_value_arr":{"$push": "$$ROOT"} } // 并合并所有筛选后的数据
}
])
mongodb 复杂查询之 本表 join的更多相关文章
- distinct 去重复查询——两个表join 连接,去掉重复的数据
------distinct 去重复查询 select * from accounts acc join (select distinct accid from roles) r on r.acci ...
- 数据库(学习整理)----7--Oracle多表查询,三种join连接
聚合函数:(都会忽略null数据) 常用的有5种:将字段中所有的数据聚合在一条中 .sum(字段名) :求总和 .avg(字段名) :求平均值 .max(字段名) :求最大值 .min(字段名) :求 ...
- 连表查询都用Left Join吧 以Windows服务方式运行.NET Core程序 HTTP和HTTPS的区别 ASP.NET SignalR介绍 asp.net—WebApi跨域 asp.net—自定义轻量级ORM C#之23中设计模式
连表查询都用Left Join吧 最近看同事的代码,SQL连表查询的时候很多时候用的是Inner Join,而我觉得对我们的业务而言,99.9%都应该使用Left Join(还有0.1%我不知道在 ...
- 【mysql】 mybatis实现 主从表 left join 1:n 一对多 分页查询 主表从表都有查询条件 【mybatis】count 统计+JSON查询
mybatis实现 主从表 left join 1:n 一对多 分页查询 主表从表都有查询条件+count 需求: ======================================= ...
- 使用内链接(A a inner join B b on a.xx = b.xx)查询2个表中某一列的相同的字段。
这里一句代码就是查询2个表中某一列的相同,可是查询出来之后B表因为有很多重复的id数据,然而查询出来的数据需要插入到临时表中,临时表的oid是不允许有重复的, 因此需要用到 distinct 函数来取 ...
- 使用c#对MongoDB进行查询(1)
1.BsonDocument对象 在MongoDB.Bson命名空间下存在一个BsonDocument类,它是MongoDB的文档对象,代表着MongoDB中不规则数据一条条实体模型.可以使用Bson ...
- 怎么对10亿数据量级的mongoDB作高效的全表扫描
转自:http://quentinxxz.iteye.com/blog/2149440 一.正常情况下,不应该有这种需求 首先,大家应该有个概念,标题中的这个问题,在大多情况下是一个伪命题,不应该被提 ...
- mongodb 复杂查询
记录一下工作中用到的 mongodb 复杂查询 aggregate 筛选 === 等于 { $match: { name: "bob" } } !== 不等于 { $match: ...
- 工作随笔——mysql子查询删除原表数据
最近在开发的时候遇到一个mysql的子查询删除原表数据的问题.在网上也看了很多方法,基本也是然并卵(不是写的太乱就是效率太慢). 公司DBA给了一个很好的解决方案,让人耳目一新. DELETE fb. ...
随机推荐
- HDU 4185 Oil Skimming 【最大匹配】
<题目链接> 题目大意: 给你一张图,图中有 '*' , '.' 两点,现在每次覆盖相邻的两个 '#' ,问最多能够覆盖几次. 解题分析: 无向图二分匹配的模板题,每个'#'点与周围四个方 ...
- Codeforces 1037D【BFS】
<题目链接> 题目大意: 给你一颗树的所有边,这些边是无向的,然后给你一段BFS序列,BFS都以1为根节点,判断这段BFS序列是否合法. 解题分析: 就是模拟BFS,某个父亲节点的所有子节 ...
- Socket/ServerSocket 选项
在网络编程中,Socket/ServerSocket有一些选项用来自定义一些行为,现在分享一下. Socket选项 1.TCP_NODELAY 在Socket发送数据时,默认情况下,数据会先进 ...
- SpringMVC(十六) 处理模型数据之SessionAttributes
@SessionAttributes原理 默认情况下Spring MVC将模型中的数据存储到request域中.当一个请求结束后,数据就失效了.如果要跨页面使用.那么需要使用到session.而@Se ...
- 路由网关---zuul
Zuul:Zuul 是在云平台上提供动态路由,监控,弹性,安全等边缘服务的框架.Zuul 相当于是设备和 Netflix 流应用的 Web 网站后端所有请求的前门. 在微服务盛行的时代,客户端与系统之 ...
- 踩坑记:Tensorflow环境搭建
自从上一篇论文投出去,之后就各种事就来了……处理那些乱七八糟的事就是让人心累,在加上师哥们毕业,能帮我的人越来越少了,而要指望你的人呢,越来越多.一想到那些用搜索引擎都搜不到资料的人,蓦地想起邓爷爷说 ...
- C#Windows窗体界面设计_05_添加菜单栏 工具栏 状态栏 按钮
- 狄克斯特拉算法(Python实现)
概述 狄克斯特拉算法--用于在加权图中找到最短路径 ps: 广度优先搜索--用于解决非加权图的最短路径问题 存在负权边时--贝尔曼-福德算法 下面是来自维基百科的权威解释. 戴克斯特拉算法(英语:Di ...
- Markdown使用简介 及 学习资源整理
Markdown资源整理 官网 http://daringfireball.net/projects/markdown/ http://jgm.github.io/stmd/spec.html htt ...
- IIS 日志分析工具:Log Parser Studio
1.安装Log Parser,下载地址:http://www.microsoft.com/en-us/download/details.aspx?displaylang=en&id=24659 ...