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


Posted in Javascript onMarch 29, 2017

发现问题

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

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

总结

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

Javascript 相关文章推荐
漂亮的widgets,支持换肤和后期开发新皮肤
Apr 23 Javascript
js捕获鼠标滚轮事件代码
Dec 16 Javascript
使用ajaxfileupload.js实现ajax上传文件php版
Jun 26 Javascript
Vue 2.x教程之基础API
Mar 06 Javascript
jQuery复合事件结合toggle()方法的用法示例
Jun 10 jQuery
get  post jsonp三种数据交互形式实例详解
Aug 25 Javascript
vue2.0 路由不显示router-view的解决方法
Mar 06 Javascript
微信小程序实现天气预报功能
Jul 18 Javascript
cnpm加速Angular项目创建的方法
Sep 07 Javascript
详解vue中使用protobuf踩坑记
May 07 Javascript
简述ES6新增关键字let与var的区别
Aug 23 Javascript
JavaScript实现身份证验证代码实例
Aug 26 Javascript
js实现一个简单的数字时钟效果
Mar 29 #Javascript
jquery实现tab键进行选择后enter键触发click行为
Mar 29 #jQuery
Vue2组件tree实现无限级树形菜单
Mar 29 #Javascript
整理关于Bootstrap列表组的慕课笔记
Mar 29 #Javascript
Vue.js 插件开发详解
Mar 29 #Javascript
整理关于Bootstrap过渡动画的慕课笔记
Mar 29 #Javascript
整理关于Bootstrap模态弹出框的慕课笔记
Mar 29 #Javascript
You might like
LINUX下PHP程序实现WORD文件转化为PDF文件的方法
2016/05/13 PHP
phpstorm 配置xdebug的示例代码
2019/03/31 PHP
checkbox 多选框 联动实现代码
2008/10/22 Javascript
Chrome中模态对话框showModalDialog返回值问题的解决方法
2010/05/25 Javascript
IE下JS读取xml文件示例代码
2013/08/05 Javascript
javascript实现原生ajax的几种方法介绍
2013/09/21 Javascript
JS 删除字符串最后一个字符的实现代码
2014/02/20 Javascript
微信分享的标题、缩略图、连接及描述设置方法
2014/10/14 Javascript
使用AngularJS对路由进行安全性处理的方法
2015/06/18 Javascript
js闭包所用的场合以及优缺点分析
2015/06/22 Javascript
值得分享的JavaScript实现图片轮播组件
2016/11/21 Javascript
js 将input框中的输入自动转化成半角大写(税号输入框)
2017/02/16 Javascript
vue.js系列中的vue-fontawesome使用
2018/02/10 Javascript
微信小程序 slot踩坑的解决
2019/04/01 Javascript
layUI的验证码功能及校验实例
2019/10/25 Javascript
Python遍历目录的4种方法实例介绍
2015/04/13 Python
Python通过Django实现用户注册和邮箱验证功能代码
2017/12/11 Python
Python实现matplotlib显示中文的方法详解
2018/02/06 Python
Request的中断和ErrorHandler实例解析
2018/02/12 Python
python读取视频流提取视频帧的两种方法
2020/10/22 Python
Django结合ajax进行页面实时更新的例子
2019/08/12 Python
关于PyTorch 自动求导机制详解
2019/08/18 Python
Python 项目转化为so文件实例
2019/12/23 Python
Pandas 解决dataframe的一列进行向下顺移问题
2019/12/27 Python
大学生的网上创业计划书
2013/12/31 职场文书
退学证明范本3篇
2014/10/29 职场文书
师德师风个人总结
2015/02/06 职场文书
银行客户经理岗位职责
2015/04/09 职场文书
2015年度物流工作总结
2015/04/30 职场文书
感恩的心主题班会
2015/08/12 职场文书
防震减灾主题班会
2015/08/14 职场文书
《确定位置》教学反思
2016/02/18 职场文书
react如何快速设置文件路径别名
2021/04/28 Javascript
如何制作自己的原生JavaScript路由
2021/05/05 Javascript
德生2P3收音机开箱评测
2022/04/30 无线电
win10截图快捷键win+shift+s没有反应无法截图怎么解决?
2022/08/14 数码科技