MongoDB 在 upsert=True 时,filter和唯一键一致,并发情况下会报错:E11000 duplicate key error collection 怎么解决?

MongoDB报错「E11000 duplicate key error collection」:唯一索引冲突与批量插入的去重策略 核心治理原则分层防护:在应用层(预处理)、数据库层(唯一索引)和分布式协调层(锁)实现多级去重动态调优:基于监控数据动态调整索引策略与批量操作参数灰度发布:新功能上线前在小流量环境验证唯一键冲突场景。 阅读详情

db.collection.createIndex({"id": 1, "platform": 1}, {unique:true})

db.collection.update_one(
    {"id": id, "platform": platform)},
    {'$set': {"some_key": data}}, upsert = True)

我已经创建了一个复合索引,并使用搜索条件将其设置为唯一,这样,在集合中,如果搜索到的内容,我搜索的内容将始终唯一。

但是在高并发的情况下,我们会有多个服务同时更新同一个collection,操作都是update_one + upsert=true 来完成的,但是每隔一段时间,服务就会报错,提示 E11000 duplicate key error collection。

这是为什么呢?
在源码中 upsert的解释是

  • upsert (optional): If True, perform an insert if no documents
    match the filter.

查询不到就插入,查询到了就更新,那会有什么问题呢? 怎么会唯一键冲突呢?
查询到官网的jira解释是:

在使用upsert=true选项进行更新期间,两个(或更多)线程可能会尝试使用相同的查询语句进行upsert操作,并且在没有找到匹配时,线程将尝试插入一个新的文档。两次插入都会(而且应该)成功,除非第二次插入导致违反唯一约束。

所以嘛,是再mongo库执行upsert的时候 并发插入导致的唯一键冲突。
官方原文链接

官方其实已经给出了解决方案,升级mongodb 到4.2 生产版本即可。

但是对于我们升级可能会有隐患的同学 就加个retry吧。

Debezium CDC实战:从原理到生产环境部署与调优 在数据驱动的现代架构中,实时数据同步是构建实时数仓、微服务解耦和缓存更新的核心需求。传统批处理ETL工具存在时间延迟和对源库压力大的问题。CDC(变更数据捕获)技术通过读取数据库事务日志(如MySQL的binlog)来捕获数据变更,实现了毫秒级的低延迟数据流。其技术价值在于将数据变更作为事件流发布,为下游的流处理框架(如Flink、Spark)提供实时数据源。Debezium作为CDC领域的开源明星,基于Kafka Connect框架,通过无状态的Connector实时捕获变更并发布到Kafka,广泛应用于 阅读详情

相关推荐

图形引擎实战:镭射效果制作分享

该方案的优势1.遵循物理的2.可以使用少量的参数去调控镭射的效果。计算相对简单,缺点仍是颜色不能够自定义,还有一种常见的方案是采样一张镭射贴图来模拟,好处是颜色可以自定义同时性能上还很高效没有复杂的公式计算。我查阅了网上普遍的方案,常见的做法是制作一个Ramp图生成工具,然后将生成好的ramp图赋给材质。这两个方案的好处是美术同学可以手动的去控制镭射的颜色。最后就是Shader中对Ramp图的采样的部分,Ramp图的UV坐标是使用fresnel作为Ramp的U轴坐标,0.5作为V轴坐标。

qq_41166022的博客 1355

解决Mongoose出现MongoServerError: E11000 duplicate key error collection的报错

因为是用mongoose开发的嘛,所以我们可以去mongoose文档看看有没有有关这种错误的处理。错误信息的关键信息在于,而当时我是在用Validation给SchemaType做校验,而刚好文档里又说到unique不是一个校验器,那么它必然会给出处理使用unique出现的错误处理。文档给出了当出现了该如何处理,而也是受到这个启发,我就对做了处理。== - 1);});用try catch捕捉异常错误,捕捉到的错误有两种情况:一种是重复键的问题,另一种是mongoose内置的校验器设置的错误。

2301_76272533的博客 3226

EETI_eGTouch驱动移植及校准

一.环境 芯片:NXP IMX6Q 内核版本:4.1.15 uname:Linux myimx6ek314 4.1.15-myimx6-g5d588fa6-dirty #4 SMP PREEMPT Tue Nov 17 17:26:34 CST 2020 armv7l armv7l armv7l GNU/Linux 二.官方《EETI_eGTouch_Linux_Programming_Guide_v2.5l.pdf》文档勘误 HID_MULTITOUCH =Y or N(官方文档设置为M): 正确设置H

Garden的博客 4334

[MongoDB]出现E11000 duplicate key error collection: index: mobile(参数)_1 dup key: { mobile:null}

Mongodb插入数据,出现E11000 duplicate key error collection: hk-projects.administrator index: mobile_1 dup key: { mobile: null }

m0_47814717的博客 2622

逆向工程师必备:用MDL绕过游戏保护读取内存数据的完整流程(附POC代码)

本文深入探讨了内核级内存访问技术,重点介绍了如何利用MDL(Memory Descriptor List)机制稳定、隐蔽地绕过游戏反作弊系统读取进程内存。通过对比MmCopyVirtualMemory等方法的优劣,提供了完整的MDL映射实战代码与反检测策略,为逆向工程师在内核态进行安全内存操作提供了专业指导。

weixin_29227425的博客 625

在WPS/Office中免费使用AI,快速提升办公效率!​

《免费解锁WPS/Office AI办公神器教程》摘要: 本教程详解如何通过第三方插件OfficeAI免费实现WPS/Office智能办公,突破官方付费限制。从安全设置到安装配置,手把手教学,涵盖文档生成、PPT美化、Excel图表等核心功能。关键优势包括零成本、全场景支持及云端/本地双模式切换,并附常见问题解决方案。注意需使用WPS 2024+版本,安装时需临时关闭杀毒软件。教程强调工具来源合法性,建议商用购买正版授权。(149字)

杜哥无敌的博客 2305

mongodb出现E11000 duplicate key error collection(id重复的解决办法)

解决mongodb id 重复问题 mongodb在插入数据时出现id重复错误,具体错误代码如下: { [MongoError: E11000 duplicate key error collection: zhihu.people index: _id_ dup key: { : ObjectId('59a3b9275f063c20cc8bdec7') }] name: 'MongoE...

咖啡的博客 3万+

Lenovo 拯救者15ISK硬件升级实战:从内存到固态硬盘的全面优化

本文详细介绍了为联想拯救者15ISK笔记本电脑进行硬件升级的完整实战指南。通过评估升级可行性,指导如何挑选兼容的内存条与NVMe固态硬盘,并提供详细的拆机安装步骤与系统安装避坑技巧。升级后,笔记本的开机速度、软件加载及多任务处理能力获得飞跃式提升,让老旧设备重获新生。

weixin_29310631的博客 557

MongoDB报错:E11000 duplicate key error collection

在最近做的项目之中,后端数据库部分使用MongoDB。 在使用中发现了如下问题:添加第一条数据时可以正常添加,第二条数据便无法添加。(无论在可视化工具中进行添加或者使用POSTMAN均无法正常添加) 将错误信息打印,如下图所示: 先说一下该条错误的中文意思:就是说该条数据的id_1这个键的值为null,而第一条数据中的id_1已经为null,两条数据出现id重复,因此报错。 出现该条错误的可能原...

weixin_43762903的博客 1万+

ARM6818嵌入式视频播放器:硬解加速与Framebuffer渲染实战

嵌入式Linux音视频系统是智能座舱、工业HMI等场景的核心能力,其本质是软硬协同的实时多媒体处理系统。原理上需打通内核驱动(如VPU硬件编解码、FIMD多图层合成)、用户空间框架(GStreamer pipeline定制、SDL2硬件渲染)与应用层同步机制(PTS/HTS双时钟校准)。技术价值在于显著降低CPU负载(硬解可压至15%以下)、提升启动速度(<1.2s首帧)并保障音画同步精度(±3ms级)。典型应用场景包括车载信息娱乐、边缘AI终端及无X11的工控显示设备。本文基于ARM6818平台,深入VP

weixin_32456485的博客 78

YOLO26科研优化:多损失函数(EIoU、SIoU等)融合,让边界框回归精度再上台阶

将原有损失函数替换为我们编写的MultiLoss。例如,在bbox_loss。

LXY_LOVE36的博客 172

安装 MongoDB、与SQL语法对比、Python (异步)操作 mongodb:增、删、改、查

安装 MongoDB、与SQL语法对比、Python (异步)操作 mongodb:增、删、改、查

freeking101的博客 8716

基于Simulink建模仿真的滑模控制的磁悬浮轴承稳定控制仿真

磁悬浮轴承(Magnetic Bearing)利用电磁力来支撑和定位转子,无需机械接触,因此在高速旋转设备中具有广泛应用。滑模控制(Sliding Mode Control, SMC)是一种鲁棒性强的非线性控制方法,适用于磁悬浮轴承的精确控制。以下是基于Simulink的磁悬浮轴承滑模控制系统的详细设计与仿真步骤。通过上述步骤,设计并实现了基于 Simulink 和 Control System Toolbox 的磁悬浮轴承滑模控制系统。

MHD0815的博客 780

mongoose 批量写入实战:用 bulkWrite 重构你的数据初始化脚本

用 bulkWrite 重构 mongoose 数据初始化脚本,把循环 save 的多次网络往返合并为一次批量命令。本文给出可复制的操作数组骨架,讲清 ordered 与 writeConcern 配置、upsertedCount 校验及 E11000 排查,并借助 TaoToken 统一通道生成与审查脚本,官网 https://taotoken.net/?utm_source=taotoken_aicg_blog_end 。

weixin_42594427的博客 10

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

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

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

ArangoDB图数据高效摄入的7个关键技术

图数据库摄入不同于传统文档写入,其核心在于保障顶点与边的结构一致性、引用完整性及事务原子性。理解ArangoDB原生图模型中顶点集合与边集合的物理分离机制,是设计可靠摄入流程的前提;掌握_key标准化、预排序、边关系预解析等技术,可显著降低索引分裂、网络IO和引用校验开销。这些方法不仅提升吞吐量与稳定性,更支撑金融风控、知识图谱等对数据准确性要求严苛的工业场景。本文聚焦Python对接ArangoDB时真实落地的工程实践,覆盖从数据准备到可观测性的完整链路。

weixin_30550081的博客 497

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

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

重复数据治理:从删重到识重的生产级实践

重复数据是数据质量体系中最易被低估却影响最深的核心问题,其本质并非简单的记录冗余,而是数据采集、传输、存储与业务语义四层耦合失衡的结果。理解duplicate data需超越pandas.drop_duplicates等工具表象,深入时间窗口对齐、复合主键设计、状态一致性保障等底层原理。该技术直接决定风控模型准确率、营销触达ROI与实时报表可信度,广泛应用于电商订单去重、金融交易防重、IoT设备日志归一化等高并发场景。本文聚焦真实生产环境中的识别-隔离-决策闭环,揭示布隆过滤器调参、Flink状态化去重、I

dianzongfan5428的博客 439

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

从 CHANGELOG 看 Pathway 的演进:连接器生态、数据持久化与 LLM RAG 能力全景解析

Pathway 是面向流处理、实时分析与 LLM/RAG 管线的 Python 增量计算框架。仓库根目录的 [CHANGELOG.md](https://link.gitcode.com/i/e7f7a6649cd8ebc6a29fd7d2dc88446f) 完整记录了该项目从 0.2.0(2023-07-20)到 0.32.1(2026-07-29)及 [Unreleased] 区间的全部版本变

gitblog_00424的博客 645

数据处理代码结构化:三层流水线设计与工程化实践

数据处理代码的可维护性本质取决于其结构设计,而非算法复杂度。其核心原理在于通过分层解耦(Source/Transform/Sink)、契约化接口(Schema驱动)和配置外置,实现数据流动意图的显式表达与状态可观测。这种结构化范式显著提升团队协作效率、降低迭代成本,并支撑高可靠数据管道建设。典型应用场景包括ETL流程重构、特征平台开发、实时推荐链路升级等需要长期演进的数据工程任务。本文聚焦于pandas/SQL/Spark生态下的落地细节,涵盖函数即契约、日志即证据、分级熔断等关键实践。

weixin_30715523的博客 402

基于Canal的MySQL增量同步实战:从Binlog到Elasticsearch

数据同步是现代系统架构中的高频需求,从业务库到缓存、搜索引擎或数据仓库,每一处跨系统数据流动背后都潜藏着一致性挑战。MySQL 的 Binlog 以行级日志记录每一次数据变更,借助 CDC(Change Data Capture)思路,将 Binlog 解析为结构化事件并实时推送下游,就能构建出高时效、低侵入的同步链路。Canal 作为一款专注 MySQL 增量同步的工具,通过伪装成复制从节点拉取 Binlog,再以统一协议输出变更消息,为实时数据同步、缓存刷新、索引更新等场景提供可靠基础。本文从数据同步的

weixin_33875839的博客 219

mongodb E11000 duplicate key error的几个可能的原因

assert: command failed: { "ok" : 0, "errmsg" : "insert for $out failed: { connectionId: 65, err: \"E11000 duplicate key error collection: admin.tmp.agg_out.6 index: _id_ dup key: { : 1 }\", code: 11...

gosline的博客 6226

MongoError: E11000 duplicate key error collection: qiandao.assets index: _id

MongoError: E11000 duplicate key error collection: qiandao.assets index: _id 这个问题出现在mongo插入数据时,原因是主键_id重复; 众所周知,mongo在插入数据时,会自动生成主键_id,但是当我们操作async.eachSeries方法,插入数据时,会导致多个数据生成相同_id; 解决方案:自己生成一个_i...

乾复道 671

mongodb $setOnInsert指令说明

$setOnInsert $setOnInsert指令往往同upsert、$set指令配合使用。mongodb官网说明: If an update operation with upsert: true results in an insert of a document, then $setOnInsert assigns the specified values to the fields ...

南熏门前一只喵 7566

Mongodb进行upsert操作,报主键重复错误

一、bug背景 并发场景,对mongodb某一collection的某一条数据进行upsert操作。 二、报错error org.springframework.dao.DuplicateKeyException: Write failed with error code 11000 and error message 'E11000 duplicate key error collection: XXX.XXX index: _id_ dup key: { : "XXX" }'; nested exc

Cactus_Lrg的博客 5189

express使用mongoose操作MongoDB新增文档报错Error: 11000 duplicate key error collection (id重复)的解决方法总结

Error: 11000 duplicate key error collection 报错 意思是插入的id和集合中已经存在的id产生了冲突,造成这个的原因有几种,大致分类了一下,但是解决方法都大差不差,核心就是清除重复索引,手动设置id并保证id不会重复

前端小白, 稀土:雩风十六 965

使用mongodb更新文档,参数upsert为true时,新生成文档包含哪些字段

使用mongo更新数据时,当upsert参数为true时且根据查询条件无结果时,mongo就要插入新纪录。 新纪录文档的内容跟查询条件和更新内容有关。 下面是官方文档的描述: If upsert is true and no document matches the query criteria, update() inserts a single document. The update ...

lieying411 5584

Mongodb插入数据出现:E11000 duplicate key error collection:错误解决方案!

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34378969的博客 4861
上一篇: 如何保证消息队列的有序
下一篇: Graph RAG 体验 demo
天马行空波
博客等级 码龄14年 205粉丝 82原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天马行空波

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值