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 相关文章推荐
JAVASCRIPT对象及属性
Feb 13 Javascript
响应鼠标变换表格背景或者颜色的代码
Mar 30 Javascript
Jquery 绑定时间实现代码
May 03 Javascript
完美兼容各大浏览器的jQuery插件实现图片切换特效
Dec 12 Javascript
js对象浅拷贝和深拷贝详解
Sep 05 Javascript
js倒计时显示实例
Dec 11 Javascript
bootstrap fileinput 插件使用项目总结(经验)
Feb 22 Javascript
详解VUE里子组件如何获取父组件动态变化的值
Dec 26 Javascript
Vue搭建后台系统需要注意的问题
Nov 08 Javascript
vue中el-input绑定键盘按键(按键修饰符)
Jul 22 Javascript
基于vue项目设置resolves.alias: '@'路径并适配webstorm
Dec 02 Vue.js
uniapp开发小程序的经验总结
Apr 08 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
Extended CHM PHP 语法手册之 DIY
2006/10/09 PHP
PHP 和 MySQL 基础教程(二)
2006/10/09 PHP
php 搜索框提示(自动完成)实例代码
2012/02/05 PHP
使用PHP备份MYSQL数据的多种方法
2014/01/15 PHP
php实现编辑和保存文件的方法
2015/07/20 PHP
PHP排序二叉树基本功能实现方法示例
2018/05/26 PHP
php+ajax 文件上传代码实例
2019/03/18 PHP
Javascript String对象扩展HTML编码和解码的方法
2009/06/02 Javascript
jQuery 工具函数学习资料
2010/04/29 Javascript
jQuery右键菜单contextMenu使用实例
2011/09/28 Javascript
jQuery插件原来如此简单 jQuery插件的机制及实战
2012/02/07 Javascript
关于js中alert弹出窗口文本换行问题简单详细说明
2012/12/11 Javascript
EditPlus注册码生成器(js代码实现)
2013/03/25 Javascript
JS+JSP通过img标签调用实现静态页面访问次数统计的方法
2015/12/14 Javascript
基于JavaScript实现动态添加删除表格的行
2016/02/01 Javascript
JavaScript 弹出子窗体并返回结果到父窗体的实现代码
2016/05/28 Javascript
AngularJS使用ng-repeat和ng-if实现数据的删选显示效果示例【适用于表单数据的显示】
2016/12/13 Javascript
从零开始学习Node.js系列教程四:多页面实现数学运算的client端和server端示例
2017/04/13 Javascript
JavaScript中this关键字用法实例分析
2018/08/24 Javascript
详解jQuery中的easyui
2018/09/02 jQuery
详解如何写出一个利于扩展的vue路由配置
2019/05/16 Javascript
[49:29]LGD vs Winstrike 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/18 DOTA
python求crc32值的方法
2014/10/05 Python
用python写扫雷游戏实例代码分享
2018/05/27 Python
Django自定义列表 models字段显示方式
2020/04/03 Python
Python搭建Keras CNN模型破解网站验证码的实现
2020/04/07 Python
Django后端分离 使用element-ui文件上传方式
2020/07/12 Python
美国现代家具网站:Design Within Reach
2018/07/19 全球购物
Mamaearth官方网站:印度母婴护理产品公司
2019/10/06 全球购物
教师个人自我评价范文
2014/04/13 职场文书
2015年机关党委工作总结
2015/05/23 职场文书
劳动争议仲裁代理词
2015/05/25 职场文书
《我是什么》教学反思
2016/02/16 职场文书
2019年“我为祖国点赞”演讲稿(3篇)
2019/09/26 职场文书
导游词之舟山普陀山
2019/11/06 职场文书
vue backtop组件的实现完整代码
2021/04/07 Vue.js