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 相关文章推荐
用htc组件制作windows选项卡
Jan 13 Javascript
js 巧妙去除数组中的重复项
Jan 25 Javascript
JavaScript 操作键盘的Enter事件(键盘任何事件),兼容多浏览器
Oct 11 Javascript
读jQuery之十四 (触发事件核心方法)
Aug 23 Javascript
JavaScript实现x秒后自动跳转到一个页面
Jan 03 Javascript
常用的JavaScript WEB操作方法分享
Feb 28 Javascript
jQuery的css() 方法使用指南
May 03 Javascript
把普通对象转换成json格式的对象的简单实例
Jul 04 Javascript
JavaScript实现兼容IE6的收起折叠与展开效果实例
Sep 20 Javascript
jQuery pjax 应用简单示例
Sep 20 jQuery
详解如何制作并发布一个vue的组件的npm包
Nov 10 Javascript
javascript的var与let,const之间的区别详解
Feb 18 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中each与list用法分析
2016/01/08 PHP
使用JavaScript创建新样式表和新样式规则
2016/06/14 PHP
php微信开发自定义菜单
2016/08/27 PHP
PHP基于简单递归函数求一个数阶乘的方法示例
2017/04/26 PHP
PHP实现双链表删除与插入节点的方法示例
2017/11/11 PHP
利用PHP内置SERVER开启web服务(本地开发使用)
2020/01/22 PHP
javascript中对对层的控制
2006/12/29 Javascript
jQuery中append、insertBefore、after与insertAfter的简单用法与注意事项
2020/04/04 Javascript
jQuery操作checkbox选择(list/table)
2013/04/07 Javascript
JS 使用for循环遍历子节点查找元素
2014/09/06 Javascript
jQuery表单验证功能实例
2015/08/28 Javascript
jquery实现浮动在网页右下角的彩票开奖公告窗口代码
2015/09/04 Javascript
JavaScript中setTimeout和setInterval函数的传参及调用
2016/03/11 Javascript
详解JavaScript设计模式开发中的桥接模式使用
2016/05/18 Javascript
JavaScript中的对象继承关系
2016/08/01 Javascript
JavaScript运动框架 多值运动(四)
2017/05/18 Javascript
JS实现评价的星星功能
2017/08/20 Javascript
mescroll.js上拉加载下拉刷新组件使用详解
2017/11/13 Javascript
高性能的javascript之加载顺序与执行原理篇
2018/01/14 Javascript
JS实现横向跑马灯效果代码
2020/04/20 Javascript
用vue 实现手机触屏滑动功能
2020/05/28 Javascript
JavaScript实现消消乐的源代码
2021/01/12 Javascript
[01:03]悬念揭晓 11月26日DOTA2完美盛典不见不散
2017/11/23 DOTA
Python实现多线程下载文件的代码实例
2014/06/01 Python
Python开发如何在ubuntu 15.10 上配置vim
2016/01/25 Python
基于python 微信小程序之获取已存在模板消息列表
2019/08/05 Python
wxpython布局的实现方法
2019/11/01 Python
python 利用zmail库发送邮件
2020/09/11 Python
python中最小二乘法详细讲解
2021/02/19 Python
分家协议书
2014/04/21 职场文书
人力资源管理专业自荐信
2014/06/24 职场文书
卖房协议书样本
2014/10/30 职场文书
2015毕业寄语大全
2015/02/26 职场文书
事业单位聘任报告
2015/03/02 职场文书
食品质检员岗位职责
2015/04/08 职场文书
PHP RabbitMQ消息列队
2022/05/11 PHP