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 相关文章推荐
基于jquery封装的一个js分页
Nov 15 Javascript
JS刷新当前页面的几种方法总结
Dec 24 Javascript
jQuery实现延迟跳转的方法
Jun 05 Javascript
Angularjs 实现分页功能及示例代码
Sep 14 Javascript
AngularJS equal比较对象实例详解
Sep 14 Javascript
VUEJS 2.0 子组件访问/调用父组件的实例
Feb 10 Javascript
JS实现DOM删除节点操作示例
Apr 04 Javascript
JavaScript对象拷贝与Object.assign用法实例分析
Jun 20 Javascript
Vue 项目分环境打包的方法示例
Aug 03 Javascript
原生js实现贪食蛇小游戏的思路详解
Nov 26 Javascript
js在HTML的三种引用方式详解
Aug 29 Javascript
ant-design-vue中tree增删改的操作方法
Nov 03 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 截取字符串 分别适合GB2312和UTF8编码情况
2009/02/12 PHP
PHP抓取、分析国内视频网站的视频信息工具类
2014/04/02 PHP
CI(CodeIgniter)框架介绍
2014/06/09 PHP
在Win2003(64位)中配置IIS6+PHP5.2.17+MySQL5.5的运行环境
2016/04/04 PHP
浅谈PHP检查数组中是否存在某个值 in_array 函数
2016/06/13 PHP
基于php(Thinkphp)+jquery 实现ajax多选反选不选删除数据功能
2017/02/24 PHP
js小技巧--自动隐藏红叉叉
2007/08/13 Javascript
jquery简单瀑布流实现原理及ie8下测试代码
2013/01/23 Javascript
JS实现遮罩层效果的简单实例
2013/11/12 Javascript
jquery插件jTimer(jquery定时器)使用方法
2013/12/23 Javascript
jQuery之字体大小的设置方法
2014/02/27 Javascript
nodejs教程之异步I/O
2014/11/21 NodeJs
第九章之路径分页标签与徽章组件
2016/04/25 Javascript
JS实现点击网页判断是否安装app并打开否则跳转app store
2016/11/18 Javascript
JS库之Three.js 简易入门教程(详解之一)
2017/09/13 Javascript
JS简单实现滑动加载数据的方法示例
2017/10/18 Javascript
JQuery animate动画应用示例
2019/05/14 jQuery
Python调用C语言开发的共享库方法实例
2015/03/18 Python
Python3如何解决字符编码问题详解
2017/04/23 Python
python for 循环获取index索引的方法
2019/02/01 Python
如何在Django配置文件里配置session链接
2019/08/06 Python
python日期与时间戳的各种转换示例
2020/02/12 Python
Python getattr()函数使用方法代码实例
2020/08/10 Python
python 实现超级玛丽游戏
2020/11/25 Python
用pip给python安装matplotlib库的详细教程
2021/02/24 Python
纯css3实现思维导图样式示例
2018/11/01 HTML / CSS
移动端Html5中百度地图的点击事件
2019/01/31 HTML / CSS
戴尔荷兰官方网站:Dell荷兰
2020/10/04 全球购物
聚网科技C++面试笔试题
2015/09/01 面试题
微型企业创业投资计划书
2014/01/10 职场文书
档案室主任岗位职责
2014/02/12 职场文书
学雷锋月活动总结
2014/04/25 职场文书
合作协议书模板
2014/10/10 职场文书
离婚协议书范本及离婚须知
2014/10/15 职场文书
详解Redis复制原理
2021/06/04 Redis
试了下Golang实现try catch的方法
2021/07/01 Golang