整理最近用的Mongo查询语句
1|0背景
最近做了几个规则逻辑。用到mongo查询比较多,就是查询交易信息跑既定规则筛选出交易商户,使用聚合管道进行统计和取出简单处理后的数据,用SQL代替业务代码逻辑的判断。
2|0方法
MongoDB聚合使用aggregate
,聚合管道采取自动向下子执行方式,基本语法格式:
聚合框架中常用的操作:
- $project:修改输入文档的结构。可以用来重命名、增加或删除域,也可以用于创建计算结果以及嵌套文档。
- match使用MongoDB的标准查询操作。
- $limit:用来限制MongoDB聚合管道返回的文档数。
- $skip:在聚合管道中跳过指定数量的文档,并返回余下的文档。
- $unwind:将文档中的某一个数组类型字段拆分成多条,每条包含数组中的一个值。
- $group:将集合中的文档分组,可用于统计结果。
- $sort:将输入文档排序后输出。
- $geoNear:输出接近某一地理位置的有序文档。
表达式 | 描述 | 实例 |
---|---|---|
$sum | 计算总和。 | db.mycol.aggregate([{\(group : {_id : "\)by_user", num_tutorial : {likes"}}}]) |
$avg | 计算平均值 | db.mycol.aggregate([{\(group : {_id : "\)by_user", num_tutorial : {likes"}}}]) |
$min | 获取集合中所有文档对应值得最小值。 | db.mycol.aggregate([{\(group : {_id : "\)by_user", num_tutorial : {likes"}}}]) |
$max | 获取集合中所有文档对应值得最大值。 | db.mycol.aggregate([{\(group : {_id : "\)by_user", num_tutorial : {likes"}}}]) |
$push | 在结果文档中插入值到一个数组中。 | db.mycol.aggregate([{\(group : {_id : "\)by_user", url : {url"}}}]) |
$addToSet | 在结果文档中插入值到一个数组中,但不创建副本。 | db.mycol.aggregate([{\(group : {_id : "\)by_user", url : {url"}}}]) |
$first | 根据资源文档的排序获取第一个文档数据。 | db.mycol.aggregate([{\(group : {_id : "\)by_user", first_url : {url"}}}]) |
$last | 根据资源文档的排序获取最后一个文档数据 | db.mycol.aggregate([{\(group : {_id : "\)by_user", last_url : {url"}}}]) |
3|0查询示例
3|1示例一
部分字段说明:transAmt:交易金额,transType:交易类型,transTime:交易时间,mercNum:商户编号
查询交易信息,交易商户昨天交易笔数大于三百,交易金额累加大于三百万,这里现根据$match
将交易信息筛选出来,然后使用$group
根据商户编号分组,统计交易笔数和累加交易金额,将分组结果判断匹配交易笔数大于三百,交易金额大于三百万。
3|2示例二
部分字段说明:cardNo:交易卡号,transType:交易类型,transTime:交易时间,mercNum:商户编号
查询时间段内指定卡号下的交易商户信息。
根据卡号和交易时间将交易数据查出来,然后只显示商户号和卡号两列字段,根据商户号和卡号分组去重,再根据卡号分组,将商户号转化成一个字段变成数组。
3|3示例三
根据指定商户和其他条件查询交易信息,根据卡号分组并组装成一个字段的集合,最后筛选掉id只保留cardNos数组
查询结果:
3|4示例四
根据时间查询交易信息后,根据商户号分组,并将第一个交易信息存放入data字段中。(如果是需要全部的商户交易信息那么将$first
修改为$push
)
4|0尾言
最近那个到查询的大差不差,要注意的都是一些小改动,一般情况正常查就可以。后续有什么不一样的会继续补充。先到这里
__EOF__
本文链接:https://www.cnblogs.com/dearsusu/p/15048714.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!