您好,登錄后才能下訂單哦!
發現問題
最近在工作中遇到了一個問題,在定義了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() [ ]
然后再在代碼里面插入就不會有問題了。
總結
以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對億速云的支持。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。