MongoDB-查找表里面重复的记录

火山方舟向量数据库大模型

背景

项目中使用的是mongodb数据库,在测试数据入库的时候,会根据源数据,然后生成一个自增的id到数据库里面,然后线上和测试环境针对同一条数据的id是不一致的。某些数据又只有id与线上匹配上的时候,才能关联上更多的数据,因此,我会去写一个脚本将同一条数据,将测试环境的id改成和线上的一致。但可能由于脚本写的还不够完善,导致数据库里面可能会写入一些重复id的记录进去,然后id又没有加唯一索引。有重复的数据又会导致正常执行etl任务会报错,因此,需要查询出在mongodb里面某个字段重复的记录。

先来回顾一下mysql中的用法

先来看一下如果是使用mysql的话,大家会怎么样去查询重复的记录呢?

比如,以metersphere平台的数据库为例,想查找出某个接口下写了超过2个有效用例的case,应该怎么查找呢:

  
SELECT api_definition_id, COUNT(*) FROM api_test_case   
WHERE `status` <> "Trash"   
GROUP BY api_definition_id   
HAVING COUNT(*) > 1   
ORDER BY COUNT(*) DESC

查出来的结果如下:

picture.image

mongo中的用法

接下来看一下在mongo中,分组统计与筛选的用法。这里不介绍具体的用法,直接展示查询语句:

比如查询user表中满足age大于15数据中,并且name重复的记录:

  
db.user.aggregate(  
 [  
 { $match: { age:{$gt:15}} },  
 { $group: { _id: "$name", count: { $sum: 1 } } },  
 { $match: { count: { $gt: 1 } } },  
 { $sort: { count: -1 } },  
 { $limit: 5000 }  
 ],  
 { allowDiskUse: true }  
)

运行结果如下:

picture.image

注意:

默认情况下,MongoDB 会尝试在内存中完成聚合操作,但是如果数据量很大,内存可能会不足,从而导致聚合操作失败。 allowDiskUse选项允许 MongoDB 将中间结果写入磁盘而不是内存 ,这有助于解决内存不足的问题,并且可以支持处理更大的数据集。需要注意的是,使用磁盘可能会导致聚合操作的速度变慢,因为磁盘通常比内存慢得多。因此,您应该在需要时才使用allowDiskUse选项,以避免不必要的磁盘访问。

chatgpt能帮我们写出来这个语句吗?

在chatpgt还没有出现之前,针对这种复杂的语句,自己要去百度学习他的用法,会稍微有点复杂,也可以使用studio3t的付费版,上面支持直接写mysql语法格式的sql进行查询,也可以帮你转换为mongo的js查询语法的语句。

在chatgp出现之后,现在这些都不是难事了:

picture.image

picture.image

picture.image

这个是真智能啊,语句中还写了一些注释。

end

想了解mongo其他基础用法的,可查看之前写过的其他文章:

MongoDB

MongoDB-MongoDB简介

MongoDB-通过docker搭建一个用来练习的mongodb数据库

MongoDB-在windows电脑本地安装一个mongodb的数据库

MongoDB-使用mongo/mongosh命令行连接数据库

MongoDB-快速上手MongoDB命令行的一些简单操作

MongoDB-_id字段的含义介绍

MongoDB-插入数据insert、insertOne、insertMany、save用法介绍

MongoDB-表数据查询的基本用法介绍

MongoDB-查询语句中>、>=、<、<=、=、!=、in、not in用法介绍

MongoDB-查询语句中逻辑运算符not、and、or、nor用法介绍

MongoDB-查询语句中exists以及结合exists以及结合ne、ninnin、nor、$not使用介绍

MongoDB-使用$type查询某个字段的类型是否为xxx

MongoDB-查询中$all的用法介绍

picture.image

也欢迎大家加入公众号粉丝交流群 ,群内会不定期提供学习资源,也会不定时分享一些行业资讯,期待与大家共同成长。为保证群成员的质量,请先加我为好友,并简要介绍自己的情况(开放朋友圈,在哪个城市,什么岗位),在确认测试同行的身份之后,我再邀请入群。避免一些打广告的混进群,给大家带来不好的体验~ ~

0
0
0
0
关于作者

文章

0

获赞

0

收藏

0

相关资源
云原生数据库 veDB 核心技术剖析与展望
veDB 是一款分布式数据库,采用了云原生计算存储分离架构。本次演讲将为大家介绍火山引擎这款云原生数据库的核心技术原理,并对未来进行展望。
相关产品
评论
未登录
看完啦,登录分享一下感受吧~
暂无评论