Mongoose經(jīng)常返回e11000 error的原因分析
發(fā)現(xiàn)問題
最近在工作中遇到了一個(gè)問題,在定義了schema之后,每一次save都會(huì)報(bào)E11000,但是db.xxx.find()里面根本就沒有沖突的條目,什么情況呢?
問題分析
可能問題出在定義的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表示,不能沖突,迷惑的地方就是,沒有沖突啊,其實(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
}
]
問題解決
里面的name和title就是之前的名字,改成了idCat和titleCat,但是成員還是會(huì)在mongodb里面,所以,你要做的就是刪除這個(gè)collection然后在重新運(yùn)行mongoose了:
> db.catalogs.drop() false > db.catalogs.getIndexes() [ ]
然后再在代碼里面插入就不會(huì)有問題了。
總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對(duì)腳本之家的支持。
相關(guān)文章
Node.js 獲取微信JS-SDK CONFIG的方法示例
這篇文章主要介紹了Node.js 獲取微信JS-SDK CONFIG的方法示例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-05-05
Node.js中的模塊機(jī)制學(xué)習(xí)筆記
這篇文章主要介紹了Node.js中的模塊機(jī)制學(xué)習(xí)筆記,本文講解了CommonJS模塊規(guī)范、Node模塊實(shí)現(xiàn)過程、模塊調(diào)用棧、包與NPM等內(nèi)容,需要的朋友可以參考下2014-11-11
Node.js EventEmmitter事件監(jiān)聽器用法實(shí)例分析
這篇文章主要介紹了Node.js EventEmmitter事件監(jiān)聽器用法,結(jié)合實(shí)例形式分析了EventEmmitter事件監(jiān)聽器相關(guān)函數(shù)與使用技巧,需要的朋友可以參考下2019-01-01
k8s node節(jié)點(diǎn)重新加入master集群的實(shí)現(xiàn)
這篇文章主要介紹了k8s node節(jié)點(diǎn)重新加入master集群的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-02-02
利用nodejs讀取圖片并將二進(jìn)制數(shù)據(jù)轉(zhuǎn)換成base64格式
這篇文章主要介紹了利用nodejs讀取圖片并將二進(jìn)制數(shù)據(jù)轉(zhuǎn)換成base64格式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-08-08

