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
  • asp之家 网络编程 m.aspxhome.com