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 相关文章推荐
extjs fckeditor集成代码
May 10 Javascript
Jquery AutoComplete自动完成 的使用方法实例
Mar 19 Javascript
js href的用法
May 13 Javascript
javascript动态改变img的src属性图片不显示的解决方法
Oct 20 Javascript
使用基于jquery的gamequery插件做JS乒乓球游戏
Jul 31 Javascript
关于jquery性能最佳实践的讨论,与求教
Mar 30 Javascript
Jsonp 关键字详解及json和jsonp的区别,ajax和jsonp的区别
Dec 30 Javascript
如何让一个json文件显示在表格里【实现代码】
May 09 Javascript
使用BootStrap实现表格隔行变色及hover变色并在需要时出现滚动条
Jan 04 Javascript
jQuery 全选 全不选 事件绑定的实现代码
Jan 23 Javascript
vue devtools的安装与使用教程
Aug 08 Javascript
JavaScript实现手风琴效果
Feb 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简单的留言板与回复功能具体实现
2014/02/19 PHP
php反射应用示例
2014/02/25 PHP
PHP实现页面静态化深入讲解
2021/03/04 PHP
精通Javascript系列之数值计算
2011/06/07 Javascript
CodeMirror2 IE7/IE8 下面未知运行时错误的解决方法
2012/03/29 Javascript
java、javascript实现附件下载示例
2014/08/14 Javascript
ANGULARJS中用NG-BIND指令实现单向绑定的例子
2014/12/08 Javascript
JavaScript中实现sprintf、printf函数
2015/01/27 Javascript
jQuery可见性过滤器:hidden和:visibility用法实例
2015/06/24 Javascript
浅谈JQuery+ajax+jsonp 跨域访问
2016/06/25 Javascript
第一次接触神奇的Bootstrap
2016/10/14 Javascript
微信小程序 wx:key详细介绍
2016/10/28 Javascript
如何用js判断dom是否有存在某class的值
2017/02/13 Javascript
js 用于检测类数组对象的函数方法
2017/05/02 Javascript
vue-router单页面路由
2017/06/17 Javascript
IntelliJ IDEA 安装vue开发插件的方法
2017/11/21 Javascript
详解nodeJs文件系统(fs)与流(stream)
2018/01/24 NodeJs
webpack里使用jquery.mCustomScrollbar插件的方法
2018/05/30 jQuery
layui table动态表头 改变表格头部 重新加载表格的方法
2019/09/21 Javascript
layui动态渲染生成select的option值方法
2019/09/23 Javascript
react实现移动端下拉菜单的示例代码
2020/01/16 Javascript
[00:15]天涯墨客终极技能展示
2018/08/25 DOTA
python解析xml模块封装代码
2014/02/07 Python
Python中进程和线程的区别详解
2017/10/29 Python
详解用Python进行时间序列预测的7种方法
2020/03/13 Python
python 代码运行时间获取方式详解
2020/09/18 Python
三陽商会官方网站:Sanyo iStore
2019/05/15 全球购物
中学教师管理制度
2014/01/14 职场文书
党员先锋岗事迹材料
2014/05/08 职场文书
白酒代理协议书范本
2014/10/26 职场文书
大学生英文求职信范文
2015/03/19 职场文书
文明和谐家庭事迹材料(2016精选版)
2016/02/29 职场文书
公司与个人合作协议书
2016/03/19 职场文书
JS Object构造函数之Object.freeze
2021/04/28 Javascript
教你使用Python获取QQ音乐某个歌手的歌单
2022/04/03 Python
带你了解Java中的ForkJoin
2022/04/28 Java/Android