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 相关文章推荐
Ajax,UTF-8还是GB2312 eval 还是execScript
Nov 13 Javascript
jQuery判断元素是否是隐藏的代码
Apr 24 Javascript
编写简单的jQuery提示插件
Dec 21 Javascript
Javascript实现Web颜色值转换
Feb 05 Javascript
使用jQuery获得内容以及内容的属性
Feb 26 Javascript
使用CSS+JavaScript或纯js实现半透明遮罩效果的实例分享
May 09 Javascript
JS求解三元一次方程组值的方法
Jan 03 Javascript
详谈angularjs中路由页面强制更新的问题
Apr 24 Javascript
vue学习教程之带你一步步详细解析vue-cli
Dec 26 Javascript
详解vue中this.$emit()的返回值是什么
Apr 07 Javascript
js里面的变量范围分享
Jul 18 Javascript
vue实现input输入模糊查询的三种方式
Aug 14 Vue.js
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漏洞小结
2012/02/05 PHP
PHP+Mysql+Ajax+JS实现省市区三级联动
2014/05/23 PHP
PHP函数eval()介绍和使用示例
2014/08/20 PHP
封装ThinkPHP的一个文件上传方法实例
2014/10/31 PHP
表单切换,用回车键替换Tab健(不支持IE)
2011/07/20 Javascript
客户端js判断文件类型和文件大小即限制上传大小
2013/11/20 Javascript
JavaScript也谈内存优化
2014/06/06 Javascript
js获取指定日期周数以及星期几的小例子
2014/06/27 Javascript
JS命令模式例子之菜单程序
2016/10/10 Javascript
JavaScript实现清空(重置)文件类型INPUT元素值的方法
2016/11/17 Javascript
jQuery中的一些小技巧
2017/01/18 Javascript
Javascript中for循环语句的几种写法总结对比
2017/01/23 Javascript
Ajax验证用户名或昵称是否已被注册
2017/04/05 Javascript
使用jQuery.Pin垂直滚动时固定导航
2017/05/24 jQuery
基于iScroll实现下拉刷新和上滑加载效果
2017/07/18 Javascript
小程序ios音频播放没声音问题的解决
2018/07/11 Javascript
利用React Router4实现的服务端直出渲染(SSR)
2019/01/07 Javascript
js 实现ajax发送步骤过程详解
2019/07/25 Javascript
python实现中文输出的两种方法
2015/05/09 Python
在Python web中实现验证码图片代码分享
2017/11/09 Python
python中的反斜杠问题深入讲解
2019/08/12 Python
使用python远程操作linux过程解析
2019/12/04 Python
详解pycharm连接不上mysql数据库的解决办法
2020/01/10 Python
Python 简单计算要求形状面积的实例
2020/01/18 Python
CSS实现圆形放大镜狙击镜效果 只有圆圈里的放大
2012/12/10 HTML / CSS
ivx平台开发之不用代码实现一个九宫格抽奖功能
2021/01/27 HTML / CSS
都柏林通行卡/城市通票:The Dublin Pass
2020/02/16 全球购物
如何用JQuery进行表单验证
2013/05/29 面试题
教师评优的个人自我评价分享
2013/09/19 职场文书
中学生纪念九一八事变演讲稿
2014/09/14 职场文书
房产协议书范本2014
2014/09/30 职场文书
离婚财产处理协议书
2014/09/30 职场文书
2014年维稳工作总结
2014/11/18 职场文书
2016班级元旦联欢会开幕词
2016/03/04 职场文书
python requests模块的使用示例
2021/04/07 Python
浅谈Redis主从复制以及主从复制原理
2021/05/29 Redis