MongoDB怎么去除大量重复的数据

管道操作删除 MongoDB 重复数据 前言 由于 MongoDB 约束性比较小,所以有时候数据库中会有很多重复的数据,特别是爬虫的数据。 文档数量一旦达到一定数据量级,为了保证新插入的数据不重复,如果每次使用 update 操作感觉有点慢,倒不如一次性 insert 然后最后在使用 pipline 管道操作去重重复数据,感觉会快些,但是我没有测试过,有兴趣的童鞋可以做个测试比较一下。 MongoDB 数据情况 数据库存在重复数据,如下... 阅读详情

本文虽然不是完全转载,但是思路及代码均是借鉴于☞不会编程的小猿☜博主的csdn博客,传送门如下:

不会编程的小猿的博客

使用python爬虫采集数据通常会存放到MongoDB数据库中,那采集到的数据可能就会有大量的重复,那么有什么思路能够去重呢,可以使用MongoDB命令对mongo去重,也可以使用第三方库pandas对MongoDB去重,使用pandas很容易,那么怎么使用MongoDB命令对数据库去重呢
首先建立一个有少量重复数据的MongoDB数据库用以模拟

首先,我的数据库名为 subject,集合名为 info
在Navicat中查看一下数据库
在这里插入图片描述
在这里插入图片描述
使用数据库命令看一下有多少条数据db.集合名.count()
在这里插入图片描述
看来有59条数据,但是不重复的数据只有5条,用字典形式展示为:
{‘name’:‘python’,‘age’:31},{‘name’:‘java’,‘age’:30},{‘name’:’.net’,‘age’:28},{‘name’:‘c++’,‘age’:35},{‘name’:‘c’,‘age’:35}
其余都是重复的数据

那么就可以在mongo shell里输入命令进行去重了

 db.info.aggregate([
    {
        $group: { _id:'$name',count: {$sum: 1},dups: {$addToSet: '$_id'}}
    },
    {
        $match: {count: {$gt: 1}}
    }
	],{allowDiskUse: true}).forEach(
    function(doc){ 
        doc.dups.shift(); 
        db.info.remove(
            {
                _id: {
                    $in: doc.dups
                }
            }
        ); 
    }
)

然后,结果如下:
去重后的数据库

至于代码中的一些参数,如果不懂的话可以去原博主的博客里看,也可以去网上查,我就不再描述了,原博客的传送门在文章最上方

嗯,就这样了

MongoDB出现ID重复?5个步骤彻底解决,代码详解+实战演练 摘要: 本文针对MongoDB中可能出现的ID重复问题,系统分析其成因(如并发插入、手动指定ID等),并提供5步实战解决方案:1)通过聚合查询确认重复;2)检查插入逻辑与日志定位原因;3)使用唯一索引或降速策略应对并发;4)手动替换UUID等唯一标识;5)清理重复数据并重构ID。文中附Java代码示例,涵盖从检测到修复的全流程,帮助开发者快速解决这一常见难题,保障数据唯一性。 阅读详情

相关推荐

VBA学习笔记6:将多个工作表中满足条件的数据汇总到同一个工作表

VBA学习笔记6:将多个工作表中满足条件的数据汇总到同一个工作表

weixin_45355881的博客 4708

Mongo DB删除重复数据文档实践

Mongo DB删除重复记录实践

肖永威的专栏 1642

目前最新NIST随机数测试软件下载、安装、及使用教程

最近由于科研需要,在搞一些随机数的测试的事情,众所周知 随机数测试我们可以使用NIST的软件进行多大15项的随机测试,我也在网上查找了很多大牛的博客,但是都是年代久远,很多的链接现在都是物是人非,都是不能直接使用了,今天顺便抽点时间更新一下这个NIST软件的下载及使用。我们首先讲一下该软件的下载:1.我们直接取NIST的官网(https://csrc.nist.gov/)下载即可 ;链接如下:下载...

Miracle.Zhao的博客 3万+

MongoDB数据去重(单字段和多字段去重)(百万级数据)

MongoDB数据去重(单字段和多字段去重)(百万级数据处理) 1、打开Mongo数据库,查询是否有数据重复 ①、查询DB_Name数据库中的item_id字段重复数据: 2、数据去重处理 原理:先将重复的数据加入到一个数组dups中,然后再利用forEach循环将dups数组的数据全部删除

m0_61720747的博客 1万+

Win11专业版破解RDP限制:实现多用户远程桌面协同办公

本文详细介绍了如何在Windows 11专业版上破解RDP限制,实现多用户远程桌面协同办公。通过使用RDPWrap工具,用户可以绕过微软的授权限制,允许多个用户同时登录同一台电脑,提高硬件利用率和团队协作效率。文章包含详细的安装配置步骤、性能优化技巧及常见问题解决方案,适用于需要远程协作的办公场景。

weixin_33806300的博客 467

【Qt】Window环境下搭建Qt6、MSVC2022开发环境(无需提前安装Visual Studio)

本文介绍 Windows 环境下无需安装 Visual Studio,搭建 Qt6 与 MSVC2022 开发环境的方法,以节省磁盘空间。核心步骤包括:用中科大镜像提速 Qt6 在线安装,需勾选 Qt Creator 17.0.1、MSVC 2022 x64 等组件;配置环境变量,添加 mingw_64、msvc2022_64 及 Qt Creator 的二进制目录;安装 MSVC 2022 编译器与 Windows 10 SDK 并记录版本;配置 Qt Creator 构建套件,可选设置 vcvarsal

油炸自行车的博客 2940

MongoDB去除重复数据(只保留一个)

【代码】MongoDB去除重复数据(只保留一个)

qq_53679247的博客 4506

Zabbix-01简单导入MIB文件并测试

这里写自定义目录标题安装 MIB文件启用MIB文件测试MIB文件 MIB文件 MIB代表管理信息库。 MIB文件允许您使用OID(对象标识符)的文本表示。 ##例如: ifHCOutOctets 是OID【1.3.6.1.2.1.31.1.1.1.10】的文本表示 安装 MIB文件 在基于Debian的系统上: # apt install snmp-mibs-downloader # download-mibs 在基于RedHat的系统上: # yum install net-snmp-libs 启用M

lokibaba的博客 9179

mongodb在插入数据环节避免数据重复的方法(python)

db['ceshi'].update({'link':job_link},{'$set':product},True) 假设link字段不想重复,那么当这个link第一次遇到时,因为True就是默认link不存在的时插入,如果是重复遇到这个link时,会更新该字典(product) 中,除了link外的其他值。 如果是insert的方法,那么他会完全把遇到的所有(product)数据都存入进...

西门大盗 捉虫专家 1万+

一文让你轻松理解Wi-Fi理论速率计算方式

如上所示,在使用FDM的802.11协议上,最小子载波带宽为312.5KHz,那一个信道频宽为20MHz的信道可以分成64个子载波,但是由于技术原因,有效使用的是52个子载波,实际用于数据传输的只有48个,有4个子载波充当导频载波。载波:交流信号或者直流信号本身不具备数据传输能力,但是如果信号发生很小的波动或者变化,从而实现数据的收发。所谓子载波,就是将信号划为为很多的小信道,这些小信道可以实现数据的并发传输,子载波我们英文称为subcarrier,也称为音调(tone)。Symbol time如下所示。

1042484520@qq.com(邮箱) 3449

网格质量评价

CFD中评价网格质量的方法

B_etter_Man的博客 1万+

【pymongodb】去除重复记录

every blog every motto: You can do more than you think. 0. 前言 duang duang duang 1. 正文 1.1 插入数据 import pymongo client = pymongo.MongoClient() db = client['test'] collection = db['gb'] collection.insert_one({'name': 'xiaoming', 'age': 19}) collection.inse

胡侃有料的博客 2270

使用OpenGL加载和显示DXF格式的3D模型文件编程

这样,我们就完成了使用OpenGL加载和显示DXF格式的3D模型文件的编程。通过实现加载函数和绘制回调函数,我们能够读取DXF文件的数据并使用OpenGL绘制出来。请注意,这只是一个简单的例子,仅涵盖了基本的加载和显示功能。在本文中,我们将探讨如何使用OpenGL编程加载和显示DXF(Drawing Exchange Format)格式的3D模型文件。DXF是一种通用的CAD(计算机辅助设计)文件格式,常用于存储和交换2D和3D图形数据。使用OpenGL加载和显示DXF格式的3D模型文件编程。

2301_79331421的博客 413

mongodb去除重复的值

今天使用mongodb发现某一字段有很多重复的值,需要根据该字段将重复的值删除,保留一份,查了很多资料,写出了一套去重代码记录下来。 首先应该将数据库表备份,这是所有数据处理步骤的最重要一步,谁也不知道会发生什么,数据无价! 删除语句解析: db.userInfo.aggregate([     {         $group: { _id: {userName: '$userName...

f12105212的博客 3248

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

MongoDB:模糊查询、数量、结果插入新表、重复字段

模糊查询: body中包含: db.getCollection('test').find({body:{$regex: /骗子/}}) body或title中包含: db.getCollection('test').find({$or:[{body:{$regex: /骗子/}},{title:{$regex: /骗子/}}]}) 想继续查符合这些条件的一共有多少条数据直接在后面.count(),就行了,适合数据量不太大的把,我的数据量非常大,会卡死,要在python里查:

kisssfish的博客 699

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

Mongodb批量插入大量数据。

  Mongodb批量插入大量数据,使用python脚本也能实现。在这种场景下尽量减少与数据库的通信,即准备好一定量的数据后批量插入。java mongodb的api提供了批量插入的功能。代码如下。    import com.mongodb.BasicDBObject; import com.mongodb.DBCollection; import com.mongodb.DBObj...

weixin_30466953的博客 2267

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

mongodb去除重复的数据(二)

前天因为工作需要,开始着手对数据库中两千多万的数据中其中一个字段重复的数据进行去重。原本使用一些测试的数据测试后,前天写的那个方法是可行的,但是当面对这个两千万的真实数据时,我却发现这方法有些不顶用了,最终只好又经过若干次的尝试,总算成功去重。最终总结一下整个过程:1、这个方法就是上一篇所讲的,利用mongodb的游标dbcursor和while循环的方式。var res=db.test.find

程序员涂小哥的技术博客 1万+

mongodb java 去重复_MongoDB数据重复解决方案

当我们在测试阶段时难免会出现一些程序写错,导致数据重复,本人因为这个问题,倒腾了几天,刚开始的思路是写脚本,因为自己语言学的太菜,导致连一个定义的公式都没想出来,后来是利用MongoDB里面的聚合解决的。下面我以一个小实例来讲把:不难看出,姓名有出现重复的现象,少的情况我们可以逐个删除,当数据量达到几百万,几千万的时候估计大家有些发愁了,应该会有些朋友会想到写脚本去筛选然后删除这些重复的数据把,其...

weixin_42668301的博客 789

mongodb java 去重复,MongoDB中间删除重复记录(Java)

MongoDB当中删除重复记录(Java)数据库表描述:Table Name:NewsFromWebColumn Name 1:_idColumn Name 2:urlColumn Name 3:titleOther Columns ........功能实现的前提:如果数据库表当中有相同的url,则认定是重复的记录.功能实现的思路:通过Group by一样的查询,找到有相同的记录,做出列表,并且把...

weixin_31493101的博客 490

在Mongodb中使用大量collections

      MongoDB中有一些情况下我们可以使用多个collections来替代一个collection.通过这种方法我们不需要在每个对象中存储重复的数据,之前的一些索引也可以去掉。在一般情况下使用多个collections不会影响执行效率.        默认情况下MongoDB对于一个数据最多只能创建24000个namespace.每一个namespace大小为628bytes,.ns文...

yutaozxy的博客 679

Mongodb去除重复的数据,pymongo去重

接上一篇的,发现爬斗鱼主播信息存入Mongodb数据库后,发现很多重复的数据,毕竟斗鱼不可能有这么多的主播,所以很多页是有重复的主播房间的。 查了一下怎么去重,发现比较麻烦,与其存入重复的数据后面再去重,还不如在存入数据库的时候就检查,不去存入重复的数据,这样就避免了后期再去做去重工作。于是改动如下: #-*- coding:utf-8 -*- #_author:John #date:...

weixin_30355437的博客 951

使用 MongoDB 处理重复数据及批量生成数据的实践

在实际开发中,处理大量数据时,可能会遇到重复数据、批量插入等需求。以下是一个 MongoDB 实战案例,包括批量生成数据、删除重复数据以及数据去重后的索引优化。1. 批量插入数据场景我们需要为某个设备在每月生成一条记录,涉及以下条件:•设备编号在一定范围内。•每月固定日期生成时间戳。•特定字段的值在一个范围内随机生成。解决方案利用 MongoDB 的批量插入功能,通过 JavaScript 脚本批...

fastboot 570

为什么pyspider+mongodb只存了一部分数据到数据库,而其他大量数据并没有写入数据库!

什么也不说,先上图! 在pyspider,抓到的数据是这样的 而查看数据库却是这样! 去查看爬虫代码,debug一下,结果是这样: 我只能说**网站这坑货!!哥,冒险不用代理爬的11万数据,你居然给我来这限制!还好发现得早,不然等被你禁了ip才发现,那我去不是亏大发了 唉,总结一下,抚慰我受伤的心,希

myfancysky的博客 3280

MongoDB数据update(upsert)的坑

统计mongodb慢查询的时候,发现有的集合慢查询很多,然后通知开发看一下字段加索引, 和开发讨论之后加唯一索引,加的时候发现有重复数据,然后用聚合命令统计了一下24w的数据有10w+的重复数据, 开发说update操作的时候加了{upsert:true},应该是查询不到新增一条,不会有重复数据, 然后查看mongodb的官方文档查看db.collection.update,其中有以下解释 ...

bozi 1万+

mongodb去重重复记录

一、mongdb的分组统计基础知识推荐以下博客       https://blog.youkuaiyun.com/congcong68/article/details/51619882  其中$addToSet  类似pandas的unique $push  类似map(lambda x: list(x)) https://blog.youkuaiyun.com/yaomingyang/article/deta...

流音寻帆的博客 2686

MongoDB去重操作(针对大量数据)

在自己百度,和请教大佬得出的一天去重操作,针对于Mongodb百万级数据进行数据去重操作 db.getCollection('表名').aggregate([ { $group: { _id: {name: '$name'},count: {$sum: 1},dups: {$addToSet: '$_id'}} }, { $match: {c...

weixin_44314661的博客 1120
上一篇: mysql常用命令
下一篇: python 使用json.loads报错:json.decoder.JSONDecodeError: Expecting value: line x column x (char x)问题的解决方式
我真看不懂代码
博客等级 码龄7年 189粉丝 15原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值