网络编程
位置:首页>> 网络编程>> JavaScript>> Mongoose经常返回e11000 error的原因分析

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

作者:多客博图  发布时间:2024-05-03 15:36:05 

标签: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",
"background" : true
}
]

问题解决

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


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

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

总结

0
投稿

猜你喜欢

手机版 网络编程 asp之家 www.aspxhome.com