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 相关文章推荐
CSS和JS标签style属性对照表(方便js开发的朋友)
Nov 11 Javascript
Js查找字符串中出现次数最多的字符及个数实例解析
Sep 05 Javascript
Vuejs第十二篇之动态组件全面解析
Sep 09 Javascript
Easyui在treegrid添加控件的实现方法
Jun 23 Javascript
web前端页面生成exe可执行文件的方法
Feb 08 Javascript
Vue微信项目按需授权登录策略实践思路详解
May 07 Javascript
JS限制输入框输入的实现代码
Jul 02 Javascript
Vue-cli3项目配置Vue.config.js实战记录
Jul 29 Javascript
微信小程序自定义组件的实现方法及自定义组件与页面间的数据传递问题
Oct 09 Javascript
JavaScript学习笔记之DOM操作实例分析
Jan 08 Javascript
vue中beforeRouteLeave实现页面回退不刷新的示例代码
Nov 01 Javascript
详解微信小程序中var、let、const用法与区别
Jan 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
PHP Header失效的原因分析及解决方法
2016/11/16 PHP
PHP实现创建一个RPC服务操作示例
2020/02/23 PHP
JS setCapture 区域外事件捕捉
2010/03/18 Javascript
JS实现self的resend
2010/07/22 Javascript
14个有用的Jquery技巧分享
2015/01/08 Javascript
javascript文本框内输入文字倒计数的方法
2015/02/24 Javascript
jQuery-1.9.1源码分析系列(十一)DOM操作续之克隆节点
2015/12/01 Javascript
prototype.js常用函数详解
2016/06/18 Javascript
利用JS实现数字增长
2016/07/28 Javascript
详解vue-router 路由元信息
2017/09/13 Javascript
Angular CLI 安装和使用教程
2017/09/13 Javascript
基于zepto.js实现登录界面
2017/10/09 Javascript
React-Router如何进行页面权限管理的方法
2017/12/06 Javascript
完美解决手机网页中输入框被输入法遮挡的问题
2017/12/19 Javascript
vue组件通信传值操作示例
2019/01/08 Javascript
js获取 gif 的帧数的代码实例
2019/09/10 Javascript
JS 图片压缩原理与实现方法详解
2020/04/29 Javascript
JQuery+drag.js上传图片并且实现图片拖曳
2020/11/18 jQuery
[01:08:44]NB vs VP 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
Python格式化css文件的方法
2015/03/10 Python
Python标准库之Sys模块使用详解
2015/05/23 Python
python爬虫获取京东手机图片的图文教程
2017/12/29 Python
python使用turtle库绘制树
2018/06/25 Python
关于pymysql模块的使用以及代码详解
2019/09/01 Python
matplotlib 范围选区(SpanSelector)的使用
2021/02/24 Python
HTML5 Canvas画线技巧——实现绘制一个像素宽的细线
2013/08/02 HTML / CSS
2014离婚协议书范文
2014/09/10 职场文书
铅球加油稿100字
2014/09/26 职场文书
考试没考好检讨书(精选篇)
2014/11/16 职场文书
2014年信用社工作总结
2014/11/25 职场文书
史上最牛辞职信
2015/05/13 职场文书
2016年学校综治宣传月活动总结
2016/03/16 职场文书
小程序实现文字循环滚动动画
2021/06/14 Javascript
与Windows10相比Windows11有哪些改进?值不值得升级?
2021/11/21 数码科技
德生2P3收音机开箱评测
2022/04/30 无线电
MYSQL事务的隔离级别与MVCC
2022/05/25 MySQL