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脚本
Aug 04 Javascript
js 实现无缝滚动 兼容IE和FF
Jul 15 Javascript
重构Javascript代码示例(重构前后对比)
Jan 23 Javascript
js实现杯子倒水问题自动求解程序
Mar 25 Javascript
JavaScript焦点事件、鼠标事件和滚轮事件使用详解
Jan 15 Javascript
JavaScript DOM 对象深入了解
Jul 20 Javascript
使用vue实现点击按钮滑出面板的实现代码
Jan 10 Javascript
初探js和简单隐藏效果的实例
Nov 23 Javascript
js实现倒计时器自定义时间和暂停
Feb 25 Javascript
Node.js系列之安装配置与基本使用(1)
Aug 30 Javascript
layer.confirm()右边按钮实现href的例子
Sep 27 Javascript
vue搜索页开发实例代码详解(热门搜索,历史搜索,淘宝接口演示)
Apr 11 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
Ubuntu下安装PHP的mongodb扩展操作命令
2015/07/04 PHP
学习jquery之一
2007/04/27 Javascript
jqTransform form表单美化插件使用方法
2012/07/05 Javascript
利用jquery.qrcode在页面上生成二维码且支持中文
2014/02/12 Javascript
Jquery EasyUI中弹出确认对话框以及加载效果示例代码
2014/02/13 Javascript
js实现登陆遮罩效果的方法
2015/07/28 Javascript
JS实现点击复选框将按钮或文本框变为灰色不可用的方法
2015/08/11 Javascript
js图片轮播特效代码分享
2015/09/07 Javascript
js控制div层的叠加简单方法
2016/10/15 Javascript
微信小程序 教程之WXSS
2016/10/18 Javascript
快速实现JS图片懒加载(可视区域加载)示例代码
2017/01/04 Javascript
JS如何实现在页面上快速定位(锚点跳转问题)
2017/08/14 Javascript
JavaScript学习笔记之惰性函数示例详解
2017/08/27 Javascript
JS使用tween.js动画库实现轮播图并且有切换功能
2018/07/17 Javascript
Vuex 单状态库与多模块状态库详解
2018/12/11 Javascript
Vue 实现可视化拖拽页面编辑器
2021/02/01 Vue.js
零基础写python爬虫之使用urllib2组件抓取网页内容
2014/11/04 Python
Python 实现一个颜色色值转换的小工具
2016/12/06 Python
Python中使用Counter进行字典创建以及key数量统计的方法
2018/07/06 Python
python看某个模块的版本方法
2018/10/16 Python
详解Python字典小结
2018/10/20 Python
python实现对图片进行旋转,放缩,裁剪的功能
2019/08/07 Python
python实现按首字母分类查找功能
2019/10/31 Python
详解Python IO编程
2020/07/24 Python
CSS 3.0 结合video视频实现的创意开幕效果
2020/06/01 HTML / CSS
详解如何将 Canvas 绘制过程转为视频
2021/01/25 HTML / CSS
巴黎欧莱雅法国官网:L’Oreal Paris
2019/04/30 全球购物
KENZO官网:高田贤三在法国创立的品牌
2019/05/16 全球购物
中专生求职自荐信范文
2013/12/22 职场文书
学生励志演讲稿
2014/01/06 职场文书
承办会议欢迎词
2014/01/17 职场文书
工作时间上网检讨书
2014/02/03 职场文书
小学国庆节活动方案策划书
2014/09/16 职场文书
水电工岗位职责
2015/02/14 职场文书
2015民办小学年度工作总结
2015/05/26 职场文书
导游词之无锡古运河
2019/11/14 职场文书