您好,登錄后才能下訂單哦!
發(fā)現(xiàn)問題
最近在工作中遇到了一個問題,在定義了schema之后,每一次save都會報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表示,不能沖突,迷惑的地方就是,沒有沖突啊,其實還有一種可能,或許你壓根想不到,就是確實沖突了,因為你給成員改名了。
用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,但是成員還是會在mongodb里面,所以,你要做的就是刪除這個collection然后在重新運行mongoose了:
> db.catalogs.drop() false > db.catalogs.getIndexes() [ ]
然后再在代碼里面插入就不會有問題了。
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學習或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對億速云的支持。
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。