MongoDB報錯:E11000 duplicate key error collection
最近在學習利用node的練習做一個博客系統,在使用MongoDB中在新增用戶的時候發現一個比較讓人困惑的問題,就是當你在第一次向MongoDB的指定集合中插入一條新的數據時能夠成功,但是當你第二次向同一個集合中再次插入數據(MongoDB官方稱之為文檔,這里簡稱為一條“數據”,便於大家理解)
基於這一個問題,自己產看了也借鑒了許多別人分享的解決方案。對此做出總結:
將錯誤信息打印,如下圖所示:

這條信息的大概意思是在向我們說明一個問題,你的_id這個字段出現了沖突,但是我就很懵b啊,,我明明自己在定義對應的schema的時候並沒有定義_id啊,怎么會是因為_id這個字段沖突了,而報錯呢?

所以說這里就有點坑人了,明明自己根本就沒有手動的設置_id這個字段,現在卻因為_id這個沖突給我報錯了。哈哈哈這他媽的簡直給我的心態都整蹦了啊!
網上查了查原因,各式各樣的解決方案應有盡有,可是然並卵一路試了下來依舊沒有解決我的問題,這里我總結了一下出現這個原因的大致分成了兩點:
1. 自己設置了id_1這個鍵,但沒有進行賦值,導致兩條數據該鍵值重復,從而報錯。
2. 自己並沒有刻意設置該鍵,但數據庫自動生成了這個鍵。工程師不知道該鍵的存在,因此未進行賦值,導致兩條數據該鍵值重復,從而報錯。
好了說了這么多還是直接說我的解決方案:
基於上面提到的兩個原因:我對原先的定義的Schema做了一點改動,MongoDB不是會給我們自動的創建一個_id字段用來標識數據的唯一性嗎?它系統的給我們創建一個ID值,數據充不重復,充不沖突就是按照他的標准來定的,那我們為什么不自己在創建schema的時候在手動的指定一個不可能重復的id字段呢?這樣他不是就不會重復了嗎?抱着試試看的心態嘗試一把。
第一步、首先將原先定義的集合刪掉(如果你原先集合中的數據很多請先備份,不然到時候找到在添加起來很麻煩喔)
第二步、在原先自己定義集合的schema中添加一個Id字段,后面的值為了保證其唯一性我們可以 new Date()當做他的值

哈哈是不是很簡單 ,至此在重新添加數據就Ok了
