Mongoose经常返回e11000 error的原因分析

前端之家收集整理的这篇文章主要介绍了Mongoose经常返回e11000 error的原因分析前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

发现问题

最近在工作中遇到了一个问题,在定义了schema之后,每一次save都会报E11000,但是db.xxx.find()里面根本就没有冲突的条目,什么情况呢?

问题分析

可能问题出在定义的schema的成员使用了unique,比如:

required: 'Id cannot be blank' },titleCat: { type: String,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 },"key" : { "title" : 1 },"name" : "title_1","key" : { "idCat" : 1 },"name" : "idCat_1","key" : { "titleCat" : 1 },"name" : "titleCat_1","background" : true } ]

问题解决

里面的name和title就是之前的名字,改成了idCat和titleCat,但是成员还是会在mongodb里面,所以,你要做的就是删除这个collection然后在重新运行mongoose了:

db.catalogs.drop() false > db.catalogs.getIndexes() [ ]

然后再在代码里面插入就不会有问题了。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对编程之家的支持

猜你在找的JavaScript相关文章