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 相关文章推荐
js点击更换背景颜色或图片的实例代码
Jun 25 Javascript
JavaScript自执行闭包的小例子
Jun 29 Javascript
12306验证码破解思路分享
Mar 25 Javascript
jQuery判断多个input file 都不能为空的例子
Jun 23 Javascript
javascript自动恢复文本框点击清除后的默认文本
Jan 12 Javascript
javascript中this指向详解
Apr 23 Javascript
JS实现双击内容变为可编辑状态
Mar 03 Javascript
详解AngularJS1.x学习directive 中‘& ’‘=’ ‘@’符号的区别使用
Aug 23 Javascript
js设置鼠标悬停改变背景色实现详解
Jun 26 Javascript
layui表单提交到后台自动封装到实体类的方法
Sep 12 Javascript
Vue+Node实现的商城用户管理功能示例
Dec 23 Javascript
Ant design vue中的联动选择取消操作
Oct 31 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
BBS(php & mysql)完整版(三)
2006/10/09 PHP
php中几种常见安全设置详解
2010/04/06 PHP
php操作excel文件 基于phpexcel
2010/07/02 PHP
Thinkphp5.0框架视图view的模板布局用法分析
2019/10/12 PHP
javascript面向对象编程(一) 实例代码
2010/06/25 Javascript
Jquery利用mouseenter和mouseleave实现鼠标经过弹出层且可以点击
2014/02/12 Javascript
用jquery写的菜单从左往右滑动出现
2014/04/11 Javascript
浅析node.js中close事件
2014/11/26 Javascript
jQuery学习笔记之基础中的基础
2015/01/19 Javascript
jQuery Validation Plugin验证插件手动验证
2016/01/26 Javascript
JS弹出层遮罩,隐藏背景页面滚动条细节优化分析
2016/04/29 Javascript
jquery实现ajax提交表单信息的简单方法(推荐)
2016/08/24 Javascript
微信小程序  audio音频播放详解及实例
2016/11/02 Javascript
jQuery弹出div层过2秒自动消失
2016/11/29 Javascript
JS实现的简单拖拽功能示例
2017/03/13 Javascript
微信小程序 生命周期函数详解
2017/05/24 Javascript
利用JS测试目标网站的打开响应速度
2017/12/01 Javascript
Vue加载json文件的方法简单示例
2019/01/28 Javascript
uni-app实现获取验证码倒计时功能
2020/11/01 Javascript
使用webpack5从0到1搭建一个react项目的实现步骤
2020/12/16 Javascript
Python中的tuple元组详细介绍
2015/02/02 Python
50行Python代码获取高考志愿信息的实现方法
2019/07/23 Python
使用Python实现音频双通道分离
2020/12/25 Python
水芝澳美国官网:H2O Plus
2016/10/15 全球购物
佐卡伊官网:中国知名珠宝品牌
2017/02/05 全球购物
小米乌克兰网上商店:Xiaomi.UA
2019/10/29 全球购物
澳洲CFL商城:CHEMIST FOR LESS(中文)
2021/02/28 全球购物
网上常见的一份Linux面试题(多项选择部分)
2015/02/07 面试题
大学四年的个人自我评价
2014/01/14 职场文书
教学评估实施方案
2014/03/16 职场文书
腾讯广告词
2014/03/19 职场文书
2014年少先队工作总结
2014/12/03 职场文书
解决Pytorch中关于model.eval的问题
2021/05/22 Python
python实现简单石头剪刀布游戏
2021/10/24 Python
Go语言的协程上下文的几个方法和用法
2022/04/11 Golang
webpack介绍使用配置教程详解webpack介绍和使用
2022/06/25 Javascript