Mongo db 11000错误来了,当时它们没有唯一的字段定义

时间:2016-01-28 09:02:38

标签: node.js mongodb mongoose

我已经将表单数据添加到mongoDB第一次保存数据但是之后出现此错误,我没有任何具有唯一类型的字段

{ [MongoError: insertDocument :: caused by :: 11000 E11000 duplicate key error index: test.employees.$employeeId_1  dup key: { : null }]
  name: 'MongoError',
  message: 'insertDocument :: caused by :: 11000 E11000 duplicate key error index: test.employees.$employeeId_1  dup key: { : null }',
  driver: true,
  code: 11000,
  index: 0,
  errmsg: 'insertDocument :: caused by :: 11000 E11000 duplicate key error index: test.employees.$employeeId_1  dup key: { : null }',
  getOperation: [Function],
  toJSON: [Function],
  toString: [Function] }

这是我没有唯一字段的架构

var employee =  
    {
        empCode : { type : String  , required : true },
        firstName : { type : String  , required : true },
        lastName : { type : String },
        email :  { type : String  },
        DOJ :{ type : Date , default: Date.now },
        DOB :{ type : Date  },
        phoneNo : { type : String },
        authentication : 
            {
                username : { type : String },
                password : { type : String }
            },
        designation : 
            {
                designationID: [{type : mongoose.Schema.ObjectId , ref:'designation'}],
                effFrom :{ type : Date , default: Date.now },
                effTo : { type : Date }             
            },
        grade : 
            {
                gradeID : [{type : mongoose.Schema.ObjectId, ref:'grade'}],
                effFrom :{ type : Date , default: Date.now },
                effTo : { type : Date }
            },
        Department :
            {
                departmentID : [{type : mongoose.Schema.ObjectId ,ref:'department'}],
                effFrom :{ type : Date , default: Date.now },
                effTo : { type : Date }
            },
        manager : 
            {
                managerID : [{type : mongoose.Schema.ObjectId , ref:'employee'}],
                effFrom :{ type : Date , default: Date.now },
                effTo : { type : Date }
            },
        role :
            {   
                roleID : [{type : mongoose.Schema.ObjectId , ref:'role'}],
                effFrom :{ type : Date , default: Date.now },
                effTo : { type : Date }
            },

        status : {type:Boolean}
    }

我无法找到哪个字段给出错误,如果您能找到错误请建议我,这对我来说将是非常有用的,在此先感谢

2 个答案:

答案 0 :(得分:2)

请从mongo db中删除你的收藏,然后执行你的代码。

您的收藏集有字段employeeID

答案 1 :(得分:1)

错误消息表示已存在browser_action.default_popup作为null的记录。也就是说,有一个employeeId没有employees

如下文所述:

  

如果文档没有唯一索引中索引字段的值,则索引将为此文档存储空值。由于唯一约束,MongoDB只允许一个缺少索引字段的文档。如果有多个文档没有索引字段的值或缺少索引字段,则索引构建将失败并出现重复键错误。

在您的情况下,employeeId的{​​{1}}似乎是employeeId,将其从employees更改为unique index可以解决您的问题。因为unique index约束spare index来从唯一索引中过滤这些unique index值并避免错误。

或者通过sparse index

删除null上的索引