【已解决】MongoDB 中根据指定字段筛选出具有重复值的记录

本文涉及的产品
云数据库 MongoDB,通用型 2核4GB
简介: 【已解决】MongoDB 中根据指定字段筛选出具有重复值的记录

🎈在业务场景中遇到这样一个问题,根据某个字段进行条件查询出来的记录总数与后端 MongoDB 数据库中记录总数出现不一致的情形,经过分析之后发现是因为数据库中某个唯一字段的值重现重复的情况,导致了有多条重复的记录存在。


🎈因此,解决方法就是先筛选出指定字段有重复值的记录,再进行删除操作。因为使用的是 MongoDB 数据库,因此需要用到 MongoDB 相关的执行命令,这与 MySQL 中相关操作语句有较大差别,针对本问题的解决方法的执行命令如下:

db.getCollection('host').aggregate([{$group: { _id : '$host_id', count: {$sum: 1}}}, {$match: {count: {$gt: 1}}}], {allowDiskUse: true})

🎈上面的执行命令其实是 MongoDB 的聚合查询(聚合管道)语句,其中, $ group:{_id: ‘$ host_id’, count: {$ sum: 1}} 中的 “host_id” 便是需要进行筛选的字段(根据情况替换成自己要筛选的字段),而 count: {$ sum: 1} 表示按照 group 的条件, 满足一条就计数就加 1,也就是 count 是 group 中 每个 host_id 的出现的次数。


🎈而 $ match: {count: {$gt: 1}}} 表示匹配 count 值大于 1 的记录,也就是 host_id 字段值出现两次以上的记录。gt 的全城是 greater than,因此 $ gt:1 便表示大于1的意思。关于 MongoDB 中常用的比较运算符如下表所示:

简称 全称
$gt greater than
$gte greater than or equal
$lt less than
$lte less than or equal
$ne not equal
$in in
$nin not in

🎈此外,由于管道阶段的 RAM 限制为 100MB,如果要处理大型数据集,那么开启 allowDiskUse 选项启用聚合管道阶段,将数据写入临时文件,找个参数可以视情况而加。

🎈最后,将上面的聚合查询语句在 Robo3T 中的终端命令行执行,得到的结果如下图所示

2e718f6de6d94987ae2f2182c528d9c8.png

🎈由上图可以看出,分别将出现重复值的 host_id 以及重复的次数查询出来。那么之后,便可以根据得到的 host_id 去后台数据库中根据 host_id 查询记录,再将记录删除,这里就不再叙述如何进行查询以及删除语句了,因为重点是关于如何利用聚合查询语句进行初步筛选得到重复值,这才是本篇博客记录的重点。


相关实践学习
MongoDB数据库入门
MongoDB数据库入门实验。
快速掌握 MongoDB 数据库
本课程主要讲解MongoDB数据库的基本知识,包括MongoDB数据库的安装、配置、服务的启动、数据的CRUD操作函数使用、MongoDB索引的使用(唯一索引、地理索引、过期索引、全文索引等)、MapReduce操作实现、用户管理、Java对MongoDB的操作支持(基于2.x驱动与3.x驱动的完全讲解)。 通过学习此课程,读者将具备MongoDB数据库的开发能力,并且能够使用MongoDB进行项目开发。   相关的阿里云产品:云数据库 MongoDB版 云数据库MongoDB版支持ReplicaSet和Sharding两种部署架构,具备安全审计,时间点备份等多项企业能力。在互联网、物联网、游戏、金融等领域被广泛采用。 云数据库MongoDB版(ApsaraDB for MongoDB)完全兼容MongoDB协议,基于飞天分布式系统和高可靠存储引擎,提供多节点高可用架构、弹性扩容、容灾、备份回滚、性能优化等解决方案。 产品详情: https://www.aliyun.com/product/mongodb
相关文章
|
NoSQL 关系型数据库 MySQL
如何向mongoDB中添加新的字段附代码(全)
关于MongoDB更多的知识点可看我之前这篇文章: MongoDB框架零基础入门本身MongoDB的连接就和Mysql的数据库一样 Mysql连接方式:mysql -u -root -p(标准模式下) MongoDB类似:mongo -u root -p之所以要增加字段值 一般都是python web框架中,在form表单内增加了一个字段值写入数据库(只有最新的数据才有这个字段值) 之前数据没有的字段值只能通过数据库添加 具体添加方式可以通过数据库内或者脚本一键添加(两种方式都差不多)在数据库内增加字段值
293 0
|
1天前
|
存储 JSON DataWorks
DataWorks产品使用合集之DataWorks将 MongoDB 中的数组类型写入到 DataWorks 的单个字段时,表示为字符串格式而非 JSON 格式如何解决
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
9 3
|
4月前
|
消息中间件 SQL NoSQL
Flink mongodb支持CDAS 到那些下游?如果是不定格式的如何处理呀?mongodb的动态字段。
Flink mongodb支持CDAS 到那些下游?如果是不定格式的如何处理呀?mongodb的动态字段。【1月更文挑战第19天】【1月更文挑战第94篇】
100 6
|
12月前
|
NoSQL MongoDB Redis
在MongoDB中使用聚合操作筛选与修改字段
在MongoDB中使用聚合操作筛选与修改字段
245 0
|
NoSQL MongoDB
MongoDB:查询部分字段,指定返回字段
MongoDB:查询部分字段,指定返回字段
1002 0
|
NoSQL MongoDB
MongoDB(14)- 查询 null 字段或缺少某个字段的文档
MongoDB(14)- 查询 null 字段或缺少某个字段的文档
298 0
|
NoSQL MongoDB 索引
MongoDB:16-MongoDB-索引数组字段和索引子文档字段
MongoDB:16-MongoDB-索引数组字段和索引子文档字段
829 0
|
NoSQL Go MongoDB
go mongodb 忽略字段,go bson 忽略字段
go mongodb 忽略字段,go bson 忽略字段
1026 0
|
NoSQL MongoDB
mongoDB表修改字段名称
柚子今天介绍的是mongoDB表修改字段名称,由此整理了相关内容,下面我们一起来看下吧。
2008 0
|
NoSQL JavaScript Java
Mongodb 的查询部分字段和按条件查询讲解|学习笔记
快速学习 Mongodb 的查询部分字段和按条件查询讲解
1862 0