MongoDB E11000 duplicate key error

wsfuller picture wsfuller · Oct 12, 2016 · Viewed 18.8k times · Source

I have a model that keeps erroring out after the first POST. I'm creating a scheduling application, which is X number of days, with rooms, and time slots for the rooms.

The issue I'm having is creating Day Objects in the database. For sake of easy reading I'm just going to have a single key value pair

day.model.js

var mongoose = require('mongoose');

// Day Schema
var daySchema = mongoose.Schema({
  name:{
    type: String,
    required: true,
  },
  createdAt:{
    type: Date,
    default: Date.now
  }
});

var Day = module.exports = mongoose.model('Day', daySchema);

// Get all Days
module.exports.getDays = function(callback, limit){
  Day.find(callback).limit();
};

// Add Day
module.exports.addDay = function(day, callback){
  var add = {
    name: day.name,
};
Day.create(add, callback);
};

day.routes.js

var express     = require('express');
var router      = express.Router();
var jwt         = require('jsonwebtoken');
var config      = require('../config/database');

Day = require('../models/day.model.js');

// Get all Days
router.get('/', function(req,res){
  Day.getDays(function(err, days){
    if(err){
      res.send(err);
    }
    res.json(days);
  }); 
});

// Add Day
router.post('/create', function(req,res){
  var day = req.body;
  Day.addDay(day, function(err, day){
    if(err){
      res.send(err);
    }
    res.json(day);
  });
});

module.exports = router;

Example JSON

  1. {"name": "Monday"}- this will reflect in the Database just fine
  2. {"name": "Tuesday"} - this will throw an 11000 error

Error

{
  "code": 11000,
  "index": 0,
  "errmsg": "E11000 duplicate key error collection: <collection-name>.days index: date_1 dup key: { : null }",
  "op": {
    "name": "Tuesday",
    "_id": "57fd89638039872dccb2230b",
    "createdAt": "2016-10-12T00:52:51.702Z",
    "__v": 0
  }
}

Where I'm confused is I have this same setup for a User but when it comes to making a new Day, this duplicate key error arises. Not sure what I'm missing or doing wrong. Thanks

Answer

num8er picture num8er · Oct 12, 2016

I think You had model for days collection with date attribute which had unique index date_1.

Now You've removed it but collection still has that index.

so that's why it says:

duplicate key error collection: .days index: date_1 dup key: { : null }

it means You're inserting another record where date attribute is also null.

log in to mongodb from console and try to do this:

db.collectionNameHere.getIndexes();
db.collectionNameHere.dropIndex('date_1');
db.collectionNameHere.getIndexes();

p.s. feel free to provide any additional data in Your question or in comments, to help me/us to solve Your issue.