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的IE和Firefox兼容性汇编(zz)
Feb 02 Javascript
JS实现在Repeater控件中创建可隐藏区域的代码
Sep 16 Javascript
jQuery(js)获取文字宽度(显示长度)示例代码
Dec 31 Javascript
jquery实现简单的无缝滚动
Apr 15 Javascript
js上传图片及预览功能实例分析
Apr 24 Javascript
jQuery实现图片向左向右切换效果的简单实例
May 18 Javascript
JS使用正则表达式实现关键字替换加粗功能示例
Aug 03 Javascript
angular.js指令中的controller、compile与link函数的不同之处
May 10 Javascript
Mac系统下Webstorm快捷键整理大全
May 28 Javascript
vue 2.0封装model组件的方法
Aug 03 Javascript
vue webpack打包优化操作技巧
Feb 22 Javascript
vue路由--网站导航功能详解
Mar 29 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版小黄鸡simsimi聊天机器人接口分享
2014/01/26 PHP
PHP静态成员变量
2017/02/14 PHP
Thinkphp 框架扩展之类库扩展操作详解
2020/04/23 PHP
Javascript 代码也可以变得优美的实现方法
2009/06/22 Javascript
用document.documentElement取代document.body的原因分析
2009/11/12 Javascript
疯狂Jquery第一天(Jquery学习笔记)
2012/05/11 Javascript
treepanel动态加载数据实现代码
2012/12/15 Javascript
JavaScript动态改变HTML页面元素例如添加或删除
2014/08/10 Javascript
Node.js中使用mongoskin操作mongoDB实例
2014/09/28 Javascript
jquery实现鼠标经过显示下划线的渐变下拉菜单效果代码
2015/08/24 Javascript
jquery validate表单验证的基本用法入门
2016/01/18 Javascript
基于jQuery实现咖啡订单管理简单应用
2017/02/10 Javascript
Vue.js仿Metronic高级表格(二)数据渲染
2017/04/19 Javascript
Swiper自定义分页器使用详解
2017/12/28 Javascript
解决在Bootstrap模糊框中使用WebUploader的问题
2018/03/22 Javascript
详解VueJs中的V-bind指令
2018/05/03 Javascript
vue导出html、word和pdf的实现代码
2018/07/31 Javascript
发布一款npm包帮助理解npm的使用
2019/01/03 Javascript
js实现简单的秒表
2020/01/16 Javascript
vue动态加载SVG文件并修改节点数据的操作代码
2020/08/17 Javascript
在Python程序中实现分布式进程的教程
2015/04/28 Python
Python中zfill()方法的使用教程
2015/05/20 Python
python 对象和json互相转换方法
2018/03/22 Python
解决python写入mysql中datetime类型遇到的问题
2018/06/21 Python
使用python绘制二元函数图像的实例
2019/02/12 Python
使用matplotlib中scatter方法画散点图
2019/03/19 Python
使用django的objects.filter()方法匹配多个关键字的方法
2019/07/18 Python
基于python实现对文件进行切分行
2020/04/26 Python
Win10下用Anaconda安装TensorFlow(图文教程)
2020/06/18 Python
关于Python3的import问题(pycharm可以运行命令行import错误)
2020/11/18 Python
int和Integer有什么区别
2013/05/25 面试题
公司授权委托书范本
2014/04/03 职场文书
护士自荐信范文
2015/03/25 职场文书
Vue+Element UI实现概要小弹窗的全过程
2021/05/30 Vue.js
MySQL删除和插入数据很慢的问题解决
2021/06/03 MySQL
Python测试框架pytest高阶用法全面详解
2022/06/01 Python