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 相关文章推荐
如何在标题栏显示框架内页面的标题
Feb 03 Javascript
JavaScript 原型与继承说明
Jun 09 Javascript
初识JQuery 实例一(first)
Mar 16 Javascript
ASP.NET jQuery 实例14 在ASP.NET form中校验时间范围
Feb 03 Javascript
javascript获取所有同类checkbox选项(实例代码)
Nov 07 Javascript
JavaScript将字符串转换为整数的方法
Apr 14 Javascript
js实现带圆角的多级下拉菜单效果
Aug 28 Javascript
Ionic默认的Tabs模板使用实例
Aug 29 Javascript
js闭包用法实例详解
Dec 13 Javascript
css和js实现弹出登录居中界面完整代码
Nov 26 Javascript
基于cropper.js封装vue实现在线图片裁剪组件功能
Mar 01 Javascript
微信小程序修改swiper默认指示器样式的实例代码
Jul 18 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 pathinfo()获得文件的路径、名称等信息说明
2011/09/13 PHP
Thinkphp模板标签if和eq的区别和比较实例分析
2015/07/01 PHP
64位windows系统下安装Memcache缓存
2015/12/06 PHP
通过chrome浏览器控制台(Console)进行PHP Debug的方法
2016/10/19 PHP
PHP实现的登录页面信息提示功能示例
2017/07/24 PHP
基于PHP实现栈数据结构和括号匹配算法示例
2017/08/10 PHP
PHP dirname简单使用代码实例
2020/11/13 PHP
JavaScript进阶教程(第四课第一部分)
2007/04/05 Javascript
javascript iframe内的函数调用实现方法
2009/07/19 Javascript
jquery1.5.1中根据元素ID获取元素对象的代码
2011/04/02 Javascript
javascript实现分栏显示小技巧附图
2014/10/13 Javascript
jQuery简单实现隐藏以及显示特效
2015/02/26 Javascript
jQuery基础知识点总结(DOM操作)
2016/06/01 Javascript
Javascript中的getter和setter初识
2017/08/17 Javascript
react-navigation 如何判断用户是否登录跳转到登录页的方法
2017/12/01 Javascript
Vue中img的src是动态渲染时不显示的解决
2019/11/14 Javascript
vue中根据时间戳判断对应的时间(今天 昨天 前天)
2019/12/20 Javascript
vue 路由守卫(导航守卫)及其具体使用
2020/02/25 Javascript
详解node.js 事件循环
2020/07/22 Javascript
Postman如何实现参数化执行及断言处理
2020/07/28 Javascript
在react项目中使用antd的form组件,动态设置input框的值
2020/10/24 Javascript
python类中super()和__init__()的区别
2016/10/18 Python
python 中if else 语句的作用及示例代码
2018/03/05 Python
pandas表连接 索引上的合并方法
2018/06/08 Python
Python类的继承用法示例
2019/01/31 Python
Python : turtle色彩控制实例详解
2020/01/19 Python
python 多线程共享全局变量的优劣
2020/09/24 Python
Python paramiko使用方法代码汇总
2020/11/20 Python
SpringBoot首页设置解析(推荐)
2021/02/11 Python
canvas画布实现手写签名效果的示例代码
2019/04/23 HTML / CSS
工程造价与管理专业应届生求职信
2013/11/23 职场文书
《曹刿论战》教学反思
2014/03/02 职场文书
莫言诺贝尔获奖演讲稿
2014/05/21 职场文书
建筑工程质量通病防治方案
2014/06/08 职场文书
文艺晚会策划方案
2014/06/11 职场文书
乡镇四风对照检查材料
2014/08/31 职场文书