IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> mongodb出现重复id怎么办? -> 正文阅读

[大数据]mongodb出现重复id怎么办?

这个问题是我带的徒弟今天遇到的,程序在向mongodb中插入数据时出现id重复的错误,出错的提示如下:

duplicate key error collection: index: id dup key: { : ObjectId(‘68a3c9271f063c20cf82dec9’) }’,

看到这个错误提示你一定会很奇怪id不是自己生成的,怎么会重复呢?要解答这个问题,我们先来看一下ObjectId以及什么是id。
id是集合中文档的主键,用于区分文档,它自动编入索引,并且指定 {id:} 查找是以id索引作为指南的。默认情况下id字段的类型为ObjectId,它是MongoDB的BSON类型之一。如果用户需要还可以将id设置为为ObjectId以外的其他类型。
ObjectId长度为12个字节,由几个2到4字节的链组成。每一个链代表并指定文档身份的具体内容。下面就列出了完整的12个字节组合:

  1. 4字节的值表示自Unix纪元以来的秒数;
  2. 3字节的机器标识符;
  3. 2字节的进程id;
  4. 3字节的计数器,它以随机值开始。

一般来说,如果文档尚未分配id值,则MongoDB将会自动生成一个id值。我们先来尝试解决一下这个问题,首先我想到的解决方案是这样的:

  1. 首先我们的代码时批量插入的
Collectwrite.InsertMany(item);
  1. 我们把它改成循环,每次只添加一个
foreach(var item in list)
{
  Collectwrite.InsertOne(item);
}

但是运行代码还是报错,那么我们在每次田间后都暂停500毫秒呢?

Collectwrite.InsertOne(item);
Thread.Sleep(500);

再次运行代码,还是同样的错误。那么这是怎么回事呢?很多情况下id是根据时间戳+主机+进程号+序列生成的,那么重复的原因可能有以下两种:

  1. 同一时间插入了两条数据,导致了数据库生成了同一个id值;
  2. 每次使用同一个变量存储不同的数据,进而导致mangodb认为每次存储的是同一条数据,最终生成同一个id值。

这两种原因都有个共同点,那就是让mongodb自己生成id。那么我们可以不让mongodb自己生成id,我们自己手动添加id,当插入的数据带有id的字段时,mongodb就不再自动生成id。至此, mongodb重复id的问题就解决了。解决代码如下:

Collectwrite.DeleteMany(x => x.SeasonId == seasonId);
foreach(var item in list)
{
	item.Id = ObjectId.GenerateNewId().ToString();
	Collectwrite.InsertOne(item);
	Thread.Sleep(500);
}
  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2021-12-04 13:30:42  更:2021-12-04 13:31:17 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 10:28:41-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码