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

网友投稿 246 2023-05-28


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

发现问题

最近在工作中遇到了一个问题,在定义了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",

"pOfZgbackground" : true

}

]

问题解决

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

> db.catalogs.drop()

false

> db.catalogs.getIndexes()

[ ]

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

总结

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


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Angular动态添加、删除输入框并计算值实例代码
下一篇:Java Set集合的遍历及实现类的比较
相关文章

 发表评论

暂时没有评论,来抢沙发吧~