SpringBoot环境MongoDB分页+去重+获取去重后的原始数据

最近有个比较复杂的MongoDB查询需求,
要求1:获取最近订单表中的请求参数信息,并需要按照请求参数中的账号进行去重
要求2:数据量可能比较大,因此需要做分页查询

研究了大半天,终于搞出了解决方案,因此记录一下供有需要的同学参考。
感谢国家、感谢互联网、感觉菜鸟教程、感谢MongoDB、感谢所有人
菜鸟教程:https://www.runoob.com/mongodb/mongodb-aggregate.html

难点分析: 分页+分组去重+获取原始数据

代码如下

本来对于MongoDB的复杂查询,我是习惯使用QuerydslPredicateExecutor这种方式的,但是QuerydslPredicateExecutor似乎还不支持分组~~(也可能是我太菜,不知道而已)~~ ,所以无奈之下采用了Aggregation聚合的这种方式。Aggregation是MongoDB提供的一个特性,这种方式基本上相当于在MongoDB执行原生查询了。

本质上是通过skip和limit实现分页效果,通过match实现条件查询,通过group实现分组,最后使用$first将分组后第一条记录中的request字段检索出来。

具体语义大家可以参考菜鸟教程。

总结与思考

习惯了使用Mysql这种关系型数据库,对MongoDB文档型数据库的了解比较生疏,就目前而言Mysql与MongoDB的实际运用场景对我仍然存在许多困惑,有了解的大佬希望能够在评论区指点一下。谢谢

  • 不确定MongoDB是否只适合存储做一些非事务型、非结构化的数据,因为对MongoDB数据进行中间处理比较复杂(因为MongoDB的数据都是非结构化的)。
  • 或许MongoDB更适合大数据场景下做数据仓库,因为数据采集通常都是一些非结构化数据。
  • 将MongoDB当成Mysql来用会徒添很多麻烦。
相关推荐
GetcharZp30 分钟前
告别繁琐命令行!这款容器可视化神器,让 Docker/K8s 管理变得如此简单
后端
铁皮饭盒4 小时前
bun直接tsx,优雅!
javascript·后端
Cosolar5 小时前
藏在 Claude Code 里的极致浪漫:完整 187 条 Spinner Verbs 全收录
后端·程序员·代码规范
Csvn5 小时前
Linux 防火墙管理 — firewalld 实战
后端
Csvn5 小时前
`functools.lru_cache` —— 一行代码搞定缓存加速
后端·python
leeyi6 小时前
Multi-Agent:让多个 AI 分工协作完成复杂任务
后端·aigc·agent
长栎6 小时前
你的策略模式是 Map<String, Strategy>?那不过是最廉价的 if-else 替代品
后端
长栎6 小时前
你写的 abstract class 里全是钩子方法——模板模式不是让你填空,是让你别越界
后端
ping某6 小时前
语法树,到底是一棵什么形状的树?
后端
_柳青杨6 小时前
一文吃透 Node.js 事件循环:从原理到 Node 20+ 重大变更
javascript·后端