快速解決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
- EXP匯出資料檔名稱重複問題的解決
- 重複登入問題最終解決方法
- android包重複問題Android
- Openlayers4地圖重複出現的問題地圖
- MongoDB系列-解決面試中可能遇到的MongoDB複製集(replica set)問題MongoDB面試
- 結合EM快速解決複雜的配置問題
- 解決生產日誌重複列印的問題
- 解決alertmanager重複傳送訊息的問題
- kafka9重複消費問題解決Kafka
- Android 解決Activity切換時出現白屏問題Android
- Android解決Activity切換時出現白屏問題Android
- 解決Linq.ToDictionary()時的鍵重複問題
- Java IO 建立檔案解決檔名重複問題Java
- iReport列印為excel表頭重複問題解決Excel
- Android studio glide包重複問題AndroidIDE
- 解決spring security自定義filter重複執行問題SpringFilter
- 解決 HttpServletRequest 的輸入流不能重複讀的問題HTTPServlet
- 解決RabbitMQ訊息丟失與重複消費問題MQ
- [ 天羽]pv問題定位,pvid重複
- mongodb啟動失敗問題解決MongoDB
- 解決Ubuntu配置nginx出現的問題UbuntuNginx
- 透過 Pulsar 原始碼徹底解決重複消費問題原始碼
- 分散式環境下利用快取解決重複性問題分散式快取
- 發現問題,解決問題
- 有關 Android Studio 重複引入包的問題和解決方案Android
- 快速解決電腦噪音問題
- 小心避坑:MySQL分頁時出現的資料重複問題MySql
- 解決最近fiddler出現“The system proxy was changed,click to reenable fiddler capture”的問題APT
- sql重複插入問題SQL
- windows 安裝 MongoDB 卡主問題解決WindowsMongoDB
- 三招解決MongoDB的磁碟IO問題MongoDB
- 在IDEA下使用JUnit出現的問題與解決辦法Idea
- 用滑動視窗來解決最長無重複子串問題
- 靈活運用分散式鎖解決資料重複插入問題分散式
- 解決mysql出現幾個l的問題MySql