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 相关文章推荐
Open and Print a Word Document
Jun 15 Javascript
Jquery中基本选择器用法实例详解
May 18 Javascript
使用jQuery调用XML实现无刷新即时聊天
Aug 07 Javascript
微信小程序入门教程
Nov 18 Javascript
详解Bootstrap各式各样的按钮(推荐)
Dec 13 Javascript
input输入框内容实时监测(附代码)
Aug 15 Javascript
浅谈如何使用 webpack 优化资源
Oct 20 Javascript
详解vue更改头像功能实现
Apr 28 Javascript
十分钟教你上手ES2020新特性
Feb 12 Javascript
微信小程序实现弹框效果
May 26 Javascript
Vue组件通信$attrs、$listeners实现原理解析
Sep 03 Javascript
解决await在forEach中不起作用的问题
Feb 25 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
全面解读PHP的Yii框架中的日志功能
2016/03/17 PHP
用js 让图片在 div或dl里 居中,底部对齐
2008/01/21 Javascript
jQuery 入门讲解1
2009/04/15 Javascript
基于mootools插件实现遮罩层新手引导
2012/05/24 Javascript
jquery重复提交请求的原因浅析
2014/05/23 Javascript
原生JavaScript实现合并多个数组示例
2014/09/21 Javascript
JS实现很酷的EMAIL地址添加功能实例
2015/02/28 Javascript
jQuery实现的多张图无缝滚动效果【测试可用】
2016/09/12 Javascript
Javascript函数中的arguments.callee用法实例分析
2016/09/16 Javascript
JavaScript排序算法动画演示效果的实现方法
2016/10/18 Javascript
基于vue的换肤功能的示例代码
2017/10/10 Javascript
vue在自定义组件中使用v-model进行数据绑定的方法
2019/03/25 Javascript
layui实现给某一列加点击事件
2019/10/26 Javascript
Vue路由管理器Vue-router的使用方法详解
2020/02/05 Javascript
[06:33]DOTA2亚洲邀请赛小组赛第二日 TOP10精彩集锦
2015/01/31 DOTA
[01:09]DOTAPLUS——DOTA2的新时代
2018/04/04 DOTA
将图片文件嵌入到wxpython代码中的实现方法
2014/08/11 Python
说一说Python logging
2016/04/15 Python
利用Python进行异常值分析实例代码
2017/12/07 Python
Python程序员面试题 你必须提前准备!(答案及解析)
2018/01/23 Python
python实现list由于numpy array的转换
2018/04/04 Python
对python:print打印时加u的含义详解
2018/12/15 Python
Python使用Turtle库绘制一棵西兰花
2019/11/23 Python
Python识别html主要文本框过程解析
2020/02/18 Python
Python 实现自动登录+点击+滑动验证功能
2020/06/10 Python
通过HTML5 Canvas API绘制弧线和圆形的教程
2016/03/14 HTML / CSS
雅诗兰黛(Estee Lauder)英国官方网站:世界顶级化妆品牌
2016/12/29 全球购物
联想中国官方商城:Lenovo China
2017/10/18 全球购物
PHP中如何创建和修改数组
2012/05/02 面试题
销售总监工作职责
2013/11/21 职场文书
个人实习生的自我评价
2014/02/16 职场文书
软环境建设心得体会
2014/09/09 职场文书
现场施工员岗位职责
2015/04/11 职场文书
2015年高校就业工作总结
2015/05/04 职场文书
2016学校元旦晚会经典开场白台词
2015/12/03 职场文书
Android使用EventBus发送消息,Fragment中接收消息的方法会执行多次
2022/04/24 Java/Android