MongoDB多字段重复数据的查询与删除

news2024/9/22 11:38:58

MongoDB的语法平时接触的不错,更多的是使用关系型数据库。最近遇到一个问题,在MongoDB中,需要找出三个字段重复的数据,有点类似于SQL数据中的三个字段组成的唯一键。并且需要将重复的数据保留一条,其余删除。但是在MongoDB中却不知道如何实现。经过查询相关资料,终于在最后实现了。相关代码记录如下:

版本

  • MongoDB 3.4.17

查询重复数据

db.getCollection('test_collection').aggregate([
{$group: {_id :{x:"$tile_row",y:"$tile_column",z:"$zoom_level"} ,
          "total": { "$sum": 1 },"dups":{$addToSet:"$_id"} }},
{'$match': {'total': {'$gt': 1}}}
],{ allowDiskUse: true })
  1. tile_rowtile_columnzoom_level是需要判重的三个字段名。
  2. allowDiskUse指示符,表示在聚合任何阶段是否因内存超出限制而将数据写入临时文件。数据量过大时,需要增加这个配置项。

运行结果如下图所示:
运行结果

删除重复数据

db.getCollection('test_collection').aggregate([
{$group: {_id :{x:"$tile_row",y:"$tile_column",z:"$zoom_level"} ,
          "total": { "$sum": 1 },"dups":{$addToSet:"$_id"} }},
{'$match': {'total': {'$gt': 1}}}
],{ allowDiskUse: true }).forEach(function(doc){
     doc.dups.pop();
     db.test_collection.deleteMany({"_id":{$in:doc.dups}});
  });

注意

  1. 根据uid分组并统计数量, g r o u p 只会返回参与分组的字段,使用 group只会返回参与分组的字段,使用 group只会返回参与分组的字段,使用addToSet在返回结果数组中增加_id字段_
  2. 使用$match匹配数量大于1的数据
  3. doc.dups.pop();表示从数组最后一个值开始删除;作用是弹出数组的最后一个_id,根据数组中剩余的_id删除所有重复的数据
  4. 使用forEach循环根据关键字重复的行来删除数据
  5. a d d T o S e t 操作符只有在字段不存在于数组中时才会向数组中添加一个字段。如果字段已经存在于数组中, addToSet 操作符只有在字段不存在于数组中时才会向数组中添加一个字段。如果字段已经存在于数组中, addToSet操作符只有在字段不存在于数组中时才会向数组中添加一个字段。如果字段已经存在于数组中,addToSet返回,不会修改数组。
  6. 注意:forEach和$addToSet的驼峰写法不能全部写成小写,因为mongodb严格区分大小写

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/453205.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

跌倒检测和识别3:Android实现跌倒检测(含源码,可实时跌倒检测)

跌倒检测和识别3:Android实现跌倒检测(含源码,可实时跌倒检测) 目录 跌倒检测和识别3:Android实现跌倒检测(含源码,可实时跌倒检测) 1. 前言 2. 跌倒检测数据集说明 3. 基于YOLOv5的跌倒检测模型训练 4.跌倒检测模型Android…

Kubernetes----Pod,资源对象文件

kubectl容器管理 kubectl用于控制Kubernetes集群的命令行工具 语法格式 kubectl [command] [type] [name] [flages] command: 子命令,如create,get,describe,delete type: 资源类型,可以表示为单数,复数形式或缩写形式 name: 资…

2023年4月份上新的图像领域分割模型设计系列论文(一)

来源:投稿 作者:王老师 编辑:学姐 论文1 论文标题: Learning Semantic-Aware Knowledge Guidance for Low-Light Image Enhancement 论文链接: https://arxiv.org/pdf/2304.07039v1.pdf代码链接: https://…

Java性能优化之序列化优化

1、Java 序列化及其缺陷 Java 提供了一种序列化机制,这种机制能够将一个对象序列化为二进制形式(字节数组),用于写入磁盘或输出到网络,同时也能从网络或磁盘中读取字节数组,反序列化成对象,在程…

无法启动此程序,因为计算机中丢失VCRUNTIME140.dll”错误的解决办法

vcruntime140.dll是什么什么文件呢?为什么电脑在运行一些游戏或许软件的时候会出现丢失vcruntime140.dll,然后游戏或许软件运行失败?这个dll文件是电脑重要的运行库文件。丢失了会导致很多程序无法运行。 首先打开电脑浏览器以后在顶部网页栏目输入&am…

MATLAB实现图像滤波及噪声消除

图像增强是指根据特定的需要突出一幅图像中的某些信息,同时削弱或去除某些不需要的信息的处理方法。其主要目的是使处理后的图像对某种特定的应用来说,比原始图像更适用。因此,这类处理是为了某种应用目的而去改善图像质量的。处理的结果使图…

ROS学习第三十六节——Gazebo仿真环境搭建

https://download.csdn.net/download/qq_45685327/87719408 1.直接添加现成模型 1.1加入环境模型 在工程文件中创建worlds文件夹&#xff0c;并把之前下载的box_house.world文件放入 1.2编写launch文件 deamo03_car_world.launch <launch><!-- 将 Urdf 文件的内容…

CCGNet用于发现共晶材料中的coformer

共晶工程&#xff08;cocrystal engineering&#xff09;在制药&#xff0c;化学和材料领域有广泛应用。然而&#xff0c;如何有效选择coformer一直是一个挑战性课题。因此&#xff0c;作者开发了一个基于GNN的深度学习框架用于快速预测共晶的形成。为了从现有报告的6819个正样…

超详细Redis入门教程——Redis命令(下)

前言 本文小新为大家带来 超详细Redis入门教程——Redis命令 相关知识&#xff0c;具体内容包括简单动态字符串 SDS&#xff0c;集合的底层实现原理&#xff0c;BitMap 操作命令&#xff0c;HyperLogLog 操作命令&#xff0c;Geospatial 操作命令&#xff0c;发布/订阅命令&…

2023.04.23 学习周报

文章目录 摘要文献阅读1.题目2.摘要3.介绍4.模型4.1 研究区域4.2 自相关分析4.3 LSTM 5.实验与讨论5.1 高架道路不同位置空气污染物的变化5.2 高架道路不同位置空气污染物的相关性5.3 高架道路不同位置空气污染物预测 6.结论7.展望 度规张量1.曲率2.度量张量3.代码实现4.平行四…

基于遗传算法的梯级水电站群优化调度研究(Matlab代码实现)

&#x1f4a5; &#x1f4a5; &#x1f49e; &#x1f49e; 欢迎来到本博客 ❤️ ❤️ &#x1f4a5; &#x1f4a5; &#x1f3c6; 博主优势&#xff1a; &#x1f31e; &#x1f31e; &#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 …

王道计组(23版)7_I/O系统

I/O控制方式 数据传输率低的外设&#xff1a; 程序查询方式 程序中断方式&#xff1a;外设准备就绪则主动向CPU发送中断请求 数据传输率高的外设&#xff1a; DMA方式&#xff1a;主存和I/O设备有一条直接数据通路&#xff0c;无需调用中断 通道方式&#xff1a;每个通道挂接若…

CTFSHOW web入门——web30

代码审计 把flag、system、php都给过滤了 passthru()函数同system()函数类似&#xff0c;都可以用来执行外部命令的&#xff0c;因此可以用passthru来代替system。 因此构造payload&#xff1a;?cpassthru(cat f*); 查看页面源代码即可获得flag

ROS学习第三十四节——URDF与Gazebo基本集成流程

https://download.csdn.net/download/qq_45685327/87718593 1.创建功能包 创建新功能包&#xff0c;导入依赖包: urdf xacro gazebo_ros gazebo_ros_control gazebo_plugins 2.编写URDF文件 demo01_helloworld.urdf <robot name"mycar"><link name"…

Android 一个获取网址时间的Demo

Android 一个获取网址时间的Demo 文章目录 Android 一个获取网址时间的Demo通过一个网址获取时间的代码关于Android NTP 时间Android 同步时间代码 前段时间有个客户想用局域网同步Android 设备的时间&#xff0c;开发后把这个demo分享一下。 效果&#xff1a; 这里也获取了阿…

Xshell中的基本命令

whoami 当我们刚登录上Xshell的时候&#xff0c;我们应该做什么呢&#xff1f;&#xff1f; 我们上次说了如何增加使用者&#xff0c;和删除使用者&#xff0c;今天我们说一下其他的基本命令。 我们刚开始登录的时候可以用root登录 那么我们怎么看自己事谁呢&#xff1f; …

C/C++占位符,%x和%p的区别

遇到的问题 今天遇到了一个很奇怪的问题&#xff0c;当使用malloc分配了一个堆空间后&#xff0c;分别尝试用cout和printf尝试打印该地址&#xff0c;出现了两个地址不一样的情况&#xff1a; int *pp (int*)malloc(10*sizeof(int)); *pp 1234; cout << pp << …

35. 搜索插入位置 58. 最后一个单词的长度

目录 35. 搜索插入位置 思路 代码 58. 最后一个单词的长度 思路1 代码1 思路2 代码2 35. 搜索插入位置 给定一个排序数组和一个目标值&#xff0c;在数组中找到目标值&#xff0c;并返回其索引。如果目标值不存在于数组中&#xff0c;返回它将会被按顺序插入的位置。…

存钱罐出口欧盟CE认证ROHS标准测试

近年来生活水平提高&#xff0c;人们手头上的余钱也多了起来&#xff0c;家长们通常会给小孩子买存钱罐&#xff0c;培养小孩子的理财能力&#xff0c;养成良好的财富观&#xff0c;一般的存钱罐都被设计用来存放硬币&#xff0c;一般分为陶瓷&#xff0c;塑料和金属。上端有缝…

电脑蓝屏怎么办?一招教你修好

很多用户遇到电脑蓝屏问题之后不懂怎么去进行解决&#xff1f;电脑蓝屏之后&#xff0c;我们只需要花一分钟制作一个启动盘&#xff0c;然后用这个启动盘来进行系统的重装就可以了。那么具体要怎么去操作呢&#xff1f;以下带来具体的操作方法教学。 准备工作&#xff1a; 1、U…