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表单验证代码(包括例子)
Nov 11 Javascript
js实现右下角可关闭最小化div(可用于展示推荐内容)
Jun 24 Javascript
zTree插件之单选下拉菜单实例代码
Nov 07 Javascript
iframe父页面获取子页面参数的方法
Feb 21 Javascript
简单模拟node.js中require的加载机制
Oct 27 Javascript
JavaScript制作弹出层效果
Dec 02 Javascript
Node.js实现文件上传的示例
Jun 28 Javascript
Vue仿今日头条实例详解
Feb 06 Javascript
Vue实现用户自定义字段显示数据的方法
Aug 28 Javascript
js尾调用优化的实现
May 23 Javascript
在微信小程序中使用vant的方法
Jun 07 Javascript
Jquery+javascript实现支付网页数字键盘
Dec 21 jQuery
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
syphon 虹吸式咖啡冲泡冲煮倒水的得与失
2021/03/03 冲泡冲煮
PHP静态调用非静态方法的应用分析
2013/05/02 PHP
php resizeimage 部分jpg文件 生成缩略图失败的原因分析及解决办法
2016/03/23 PHP
phpinfo()中Loaded Configuration File(none)的解决方法
2017/01/16 PHP
PHP如何将图片文件上传到另外一台服务器上
2019/08/26 PHP
jQuery 常见开发使用技巧总结
2009/12/26 Javascript
JQuery 自定义CircleAnimation,Animate方法学习笔记
2011/07/10 Javascript
asp.net网站开发中用jquery实现滚动浏览器滚动条加载数据(类似于腾讯微博)
2012/03/14 Javascript
JavaScript 图像动画的小demo
2012/05/23 Javascript
使用js对select动态添加和删除OPTION示例代码
2013/08/12 Javascript
jquery实现瀑布流效果分享
2014/03/26 Javascript
js打开windows上的可执行文件示例
2014/05/27 Javascript
Node.js与PHP、Python的字符处理性能对比
2014/07/06 Javascript
JavaScript之排序函数_动力节点Java学院整理
2017/06/30 Javascript
Express+Nodejs 下的登录拦截实现代码
2017/07/01 NodeJs
nodejs+mongodb aggregate级联查询操作示例
2018/03/17 NodeJs
详解vue-loader在项目中是如何配置的
2018/06/04 Javascript
微信小程序使用template标签实现五星评分功能
2018/11/03 Javascript
微信小程序自定义多列选择器使用详解
2019/06/21 Javascript
微信小程序如何调用新闻接口实现列表循环
2019/07/02 Javascript
[01:04:31]DOTA2-DPC中国联赛定级赛 iG vs Magma BO3第二场 1月8日
2021/03/11 DOTA
Python中的模块导入和读取键盘输入的方法
2015/10/16 Python
解决python3输入的坑——input()
2020/12/05 Python
东南亚排名第一的服务市场:kaodim
2019/03/28 全球购物
Hawes & Curtis官网:英国经典品牌
2019/07/27 全球购物
德国排名第一的主题公园门票网站:Attraction Tickets Direct
2019/09/09 全球购物
SAZAC的动物连体衣和动物睡衣:Kigurumi Shop
2020/03/14 全球购物
大学生饮食配送创业计划书
2014/01/04 职场文书
消防先进事迹材料
2014/02/10 职场文书
购房协议书
2014/04/11 职场文书
网吧七夕活动策划方案
2014/08/31 职场文书
2016三严三实专题教育活动心得体会
2016/01/06 职场文书
centos8安装MongoDB的详细过程
2021/10/24 MongoDB
Python中的变量与常量
2021/11/11 Python
Nginx图片服务器配置之后图片访问404的问题解决
2022/03/21 Servers
python 判断字符串当中是否包含字符(str.contain)
2022/06/01 Python