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 相关文章推荐
获取客户端网卡MAC地址和IP地址实现JS代码
Mar 17 Javascript
cookie.js 加载顺序问题怎么才有效
Jul 31 Javascript
JavaScript中的方法调用详细介绍
Dec 30 Javascript
原生js和jQuery实现淡入淡出轮播效果
Dec 25 Javascript
JS获取屏幕高度的简单实现代码
May 24 Javascript
Js删除数组中某一项或几项的几种方法(推荐)
Jul 27 Javascript
jQuery模拟淘宝购物车功能
Feb 27 Javascript
angular4 JavaScript内存溢出问题
Mar 06 Javascript
解决vue多个路由共用一个页面的问题
Mar 12 Javascript
微信小程序非swiper组件实现的自定义伪3D轮播图效果示例
Dec 11 Javascript
微信小程序自定义toast组件的方法详解【含动画】
May 11 Javascript
jquery实现点击左右按钮切换图片
Jan 27 jQuery
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开发需要注意的安全问题
2010/09/01 PHP
php中邮箱地址正则表达式实现与详解
2012/04/24 PHP
Ubuntu中启用php的mail()函数并解决发送邮件速度慢问题
2015/03/27 PHP
纯js网页画板(Graphics)类简介及实现代码
2012/12/24 Javascript
js 处理数组重复元素示例代码
2013/12/27 Javascript
node.js实现多图片上传实例
2014/06/03 Javascript
javascript学习笔记(四)function函数部分
2014/09/30 Javascript
js预加载图片方法汇总
2015/06/15 Javascript
jQuery实现径向动画菜单效果
2015/07/17 Javascript
javascript去掉代码里面的注释
2015/07/24 Javascript
jQuery ajax全局函数处理session过期后的ajax跳转问题
2016/06/03 Javascript
javascript中Date对象应用之简易日历实现
2016/07/12 Javascript
JS中使用gulp实现压缩文件及浏览器热加载功能
2017/07/12 Javascript
微信小程序动态生成二维码的实现代码
2018/07/25 Javascript
JS/HTML5游戏常用算法之碰撞检测 包围盒检测算法详解【凹多边形的分离轴检测算法】
2018/12/13 Javascript
PHP webshell检查工具 python实现代码
2009/09/15 Python
django-初始配置(纯手写)详解
2019/07/30 Python
基于django传递数据到后端的例子
2019/08/16 Python
利用Python复制文件的9种方法总结
2019/09/02 Python
Python获取统计自己的qq群成员信息的方法
2019/11/15 Python
深入浅析Python 命令行模块 Click
2020/03/11 Python
python模拟点击在ios中实现的实例讲解
2020/11/26 Python
Html5上传图片 移动端、PC端通用代码
2016/06/08 HTML / CSS
浅谈Html5移动端ios/Android兼容性总结
2018/06/01 HTML / CSS
日本最佳原创设计品牌:Felissimo(芬理希梦)
2019/03/19 全球购物
日本化妆品植村秀俄罗斯官方网站:Shu Uemura俄罗斯
2020/02/01 全球购物
计算机专业自我鉴定
2013/10/15 职场文书
财务专业大学生职业生涯规划范文
2013/12/30 职场文书
静心口服夜广告词
2014/03/20 职场文书
防邪知识进家庭活动方案
2014/08/26 职场文书
公司经营目标责任书
2015/01/29 职场文书
世界名著读书笔记
2015/06/25 职场文书
Python合并pdf文件的工具
2021/07/01 Python
MySQL如何快速创建800w条测试数据表
2022/03/17 MySQL
JAVA springCloud项目搭建流程
2022/05/11 Java/Android
MySQL事务的ACID特性以及并发问题方案
2022/07/15 MySQL