Mongoose經(jīng)常返回e11000 error的原因分析
發(fā)現(xiàn)問(wèn)題
最近在工作中遇到了一個(gè)問(wèn)題,在定義了schema之后,每一次save都會(huì)報(bào)E11000,但是db.xxx.find()
里面根本就沒(méi)有沖突的條目,什么情況呢?
問(wèn)題分析
可能問(wèn)題出在定義的schema的成員使用了unique,比如:
var CatalogSchema = new Schema({ idCat: { type: String, default: '', trim: true, unique: 'Id should be unique!', required: 'Id cannot be blank' }, titleCat: { type: String, default: '', trim: true, unique: 'Title should be unique!', required: 'Title cannot be blank' } }); mongoose.model('Catalog', CatalogSchema);
unique表示,不能沖突,迷惑的地方就是,沒(méi)有沖突啊,其實(shí)還有一種可能,或許你壓根想不到,就是確實(shí)沖突了,因?yàn)槟憬o成員改名了。
用mongodb的命令行工具查看就知道:
> db.catalogs.getIndexes() [ { "v" : 1, "key" : { "_id" : 1 }, "name" : "_id_", "ns" : "ocr-dev.catalogs" }, { "v" : 1, "unique" : true, "key" : { "name" : 1 }, "name" : "name_1", "ns" : "ocr-dev.catalogs", "background" : true }, { "v" : 1, "unique" : true, "key" : { "title" : 1 }, "name" : "title_1", "ns" : "ocr-dev.catalogs", "background" : true }, { "v" : 1, "unique" : true, "key" : { "idCat" : 1 }, "name" : "idCat_1", "ns" : "ocr-dev.catalogs", "background" : true }, { "v" : 1, "unique" : true, "key" : { "titleCat" : 1 }, "name" : "titleCat_1", "ns" : "ocr-dev.catalogs", "background" : true } ]
問(wèn)題解決
里面的name和title就是之前的名字,改成了idCat和titleCat,但是成員還是會(huì)在mongodb里面,所以,你要做的就是刪除這個(gè)collection然后在重新運(yùn)行mongoose了:
> db.catalogs.drop() false > db.catalogs.getIndexes() [ ]
然后再在代碼里面插入就不會(huì)有問(wèn)題了。
總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能帶來(lái)一定的幫助,如果有疑問(wèn)大家可以留言交流,謝謝大家對(duì)腳本之家的支持。
相關(guān)文章
Windows7系統(tǒng)下如何安裝nodejs16以上版本
這篇文章主要給大家介紹了關(guān)于Windows7系統(tǒng)下如何安裝nodejs16以上版本的相關(guān)資料,很多時(shí)候node.js的版本存在兼容,文中通過(guò)圖文介紹的非常詳細(xì),需要的朋友可以參考下2023-07-07visual studio配置node.js開(kāi)發(fā)的圖文教程
在進(jìn)行node開(kāi)發(fā)時(shí),使用visual studio作為開(kāi)發(fā)工具是非常常見(jiàn)的選擇,本文主要介紹了visual studio配置node.js開(kāi)發(fā)的圖文教程,具有一定的參考價(jià)值,感興趣的可以了解一下2024-05-05詳解Node.js access_token的獲取、存儲(chǔ)及更新
本篇文章主要介紹了Node.js access_token的獲取、存儲(chǔ)及更新 ,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-06-06node.js中的fs.ftruncate方法使用說(shuō)明
這篇文章主要介紹了node.js中的fs.ftruncate方法使用說(shuō)明,本文介紹了fs.ftruncate的方法說(shuō)明、語(yǔ)法、接收參數(shù)、使用實(shí)例和實(shí)現(xiàn)源碼,需要的朋友可以參考下2014-12-12