快速解決mongodb出現id重複問題
導讀 | 近期在使用mongodb的過程中遇到一次表中有_id欄位重複的記錄(相同_id的有兩條),著實嚇了一大跳,這篇文章主要給大家介紹了關於mongodb出現id重複問題的簡單解決辦法,需要的朋友可以參考下 |
今天遇到mongodb在插入資料時出現id重複錯誤,具體錯誤程式碼如下:
duplicate key error collection: index: id dup key: { : ObjectId(‘59a3b9275f063c20cc8bdec7') }',
覺得奇怪 id不是自己生成的,怎麼會這樣呢 。
於是查了下ObjectId 。
這些是 _id 的一些主要特徵的摘要:
_id 是集合中文件的主鍵,用於區分文件(記錄)。
_id自動編入索引。指定 { _id: } 的查詢將 _id 索引作為其指南。
預設情況下,_id 欄位的型別為 ObjectID,是 MongoDB 的 BSON 型別之一。如果需要,使用者還可以將 _id 覆蓋為 ObjectID 以外的其他內容。
ObjectID 長度為 12 位元組,由幾個 2-4 位元組的鏈組成。每個鏈代表並指定文件身份的具體內容。以下的值構成了完整的 12 位元組組合:
一個 4 位元組的值,表示自 Unix 紀元以來的秒數
一個 3 位元組的機器識別符號
一個 2 位元組的程式 ID
一個 3 位元組的計數器,以隨機值開始
通常,如果文件尚未分配 _id 值,MongoDB 將自動生成一個 _id 值。
我的程式碼大概是這樣的 ,批次插入
Collectwrite.InsertMany(item);
後面測試了下乾脆改成單個新增
foreach(var item in list) { Collectwrite.InsertOne(item); }
也是報錯。
Collectwrite.InsertOne(item); Thread.Sleep(500);
再後來降速新增,錯誤依舊。
百度了一下,發現很多人都出現了類似問題,資料庫的id是根據 時間戳+主機+程式號+序列生成的。重複的原因可能有兩種:
內部原因:同時插入兩條資料,導致資料庫生成了同一個id值。
外部原因:每次使用同一個變數儲存不同的資料,導致資料庫認為每次儲存的是同一條資料,最終生成同一個id值。
以上都有個共同點,就是讓資料庫自己生成id值。於是乾脆換個思路
自己手動新增id值,當插入的資料帶有_id的欄位時,mongodb就不再自動生成id。至此, mongodb重複id的問題就解決了。 item.Id = ObjectId.GenerateNewId().ToString();
Collectwrite.DeleteMany(x => x.SeasonId == seasonId); foreach(var item in list) { item.Id = ObjectId.GenerateNewId().ToString(); Collectwrite.InsertOne(item); Thread.Sleep(500); } }
到此這篇關於mongodb出現id重複問題的簡單解決辦法的文章就介紹到這了
原文來自:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69955379/viewspace-2851970/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- RCmongodb出現id重複問題的簡單解決辦法jztMongoDB
- 解決winform窗體重複建立問題ORM
- 答讀者問:關於隱式 id 重複的問題
- Openlayers4地圖重複出現的問題地圖
- 解決alertmanager重複傳送訊息的問題
- 解決生產日誌重複列印的問題
- 解決Linq.ToDictionary()時的鍵重複問題
- MongoDB系列-解決面試中可能遇到的MongoDB複製集(replica set)問題MongoDB面試
- 快速解決整合華為AGC服務提示miss client id問題GCclient
- DefaultIdentifierGenerator 雪花演算法 生成 重複 id 解決辦法IDE演算法
- 解決 HttpServletRequest 的輸入流不能重複讀的問題HTTPServlet
- 解決spring security自定義filter重複執行問題SpringFilter
- Java IO 建立檔案解決檔名重複問題Java
- 解決RabbitMQ訊息丟失與重複消費問題MQ
- mongodb啟動失敗問題解決MongoDB
- 解決Ubuntu配置nginx出現的問題UbuntuNginx
- 透過 Pulsar 原始碼徹底解決重複消費問題原始碼
- 分散式環境下利用快取解決重複性問題分散式快取
- Python Requests庫文件連結404問題解決及防止重複問題的建議Python
- windows 安裝 MongoDB 卡主問題解決WindowsMongoDB
- 小心避坑:MySQL分頁時出現的資料重複問題MySql
- 靈活運用分散式鎖解決資料重複插入問題分散式
- Spring Boot + Redis 解決陪玩平臺原始碼重複提交問題Spring BootRedis原始碼
- 測試平臺系列(82) 解決APScheduler重複執行的問題
- 解決移動端複製問題
- 關於 PHP Session ID 改變的問題解決PHPSession
- 分治思想--快速排序解決TopK問題排序TopK
- 8 種方案解決重複提交問題!你選擇哪一種呀?
- React Hooks學習之旅五:useMemo解決子元件重複執行問題ReactHook元件
- 用滑動視窗來解決最長無重複子串問題
- kafka監聽出現的問題,解決和剖析Kafka
- iOS 解決tableHeaderView新增searchBar後出現的問題iOSHeaderView
- 解決csdn登陸複製的問題
- 元件複用傳值(待解決問題)元件
- 解決MongoDB儲存時間時差的問題MongoDB
- Springboot+Redisson自定義註解一次解決重複提交問題(含原始碼)Spring BootRedis原始碼
- 如何快速定位線上出現的問題?
- 簡單介紹redis分散式鎖解決表單重複提交的問題Redis分散式