Mongoose经常返回e11000 error的原因分析
作者:多客博图 时间:2024-05-03 15:36:05
发现问题
最近在工作中遇到了一个问题,在定义了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()
[ ]
然后再在代码里面插入就不会有问题了。
总结
标签:Mongoose,e11000,error
0
投稿
猜你喜欢
用MySQL内建复制功能来优化可用性
2009-02-13 13:55:00
Python实战之实现简单的名片管理系统
2023-07-18 06:48:02
3个用于数据科学的顶级Python库
2022-09-25 15:26:45
vue前端开发keepAlive使用详解
2024-05-02 16:33:52
Windows环境下python环境安装使用图文教程
2023-12-25 10:13:26
MySQL触发器trigger的使用
2024-01-23 15:08:23
ASP实现SQL语句日期格式的加减运算
2008-11-07 15:13:00
MySQL中可为空的字段设置为NULL还是NOT NULL
2024-01-13 14:38:26
利用Python绘制虎年烟花秀
2022-10-08 06:03:49
Python2包含中文报错的解决方法
2021-09-12 20:51:24
Python面向对象之反射/自省机制实例分析
2022-07-27 06:57:53
Django发送html邮件的方法
2021-04-06 13:22:52
防注入asp过滤sql特殊字符函数
2007-10-23 17:50:00
mysql实现合并同一ID对应多条数据的方法
2024-01-15 16:19:34
switchery按钮的使用方法
2024-04-29 13:40:44
Golang多线程排序实现快速高效地处理大规模数据
2024-04-27 15:32:29
一文教你实现Python重试装饰器
2022-04-23 08:01:07
PhpStorm连接服务器并实现自动上传功能
2024-05-02 17:07:02
“验证码”等于“流氓软件”
2007-10-19 18:29:00
mysql数据库忘记管理员密码的解决方法
2024-01-24 10:56:55