MongoDB E11000重复键错误

Ful*_*rid 6 mongodb express mongoose-schema

我有一个模型,在第一次POST后不断出错.我正在创建一个X天的调度应用程序,包括房间和房间的时间段.

我遇到的问题是在数据库中创建Day Objects.为了便于阅读,我将只有一个键值对

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);
};
Run Code Online (Sandbox Code Playgroud)

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;
Run Code Online (Sandbox Code Playgroud)

示例JSON

  1. {"name": "Monday"}- 这将反映在数据库中就好了
  2. {"name": "Tuesday"} - 这会抛出11000错误

错误

{
  "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
  }
}
Run Code Online (Sandbox Code Playgroud)

令我感到困惑的是,我为用户设置了相同的设置,但是当涉及到新的一天时,会出现此重复键错误.不确定我错过了什么或做错了什么.谢谢

num*_*8er 16

我认为你有具有唯一索引的属性的days集合模型.datedate_1

现在你已经删除了它,但集合仍然具有该索引.

这就是为什么它说:

重复键错误集合:.days index:date_1 dup key:{:null}

它意味着您正在插入另一个记录,其中dateattribute也为null.

从控制台登录mongodb并尝试执行此操作:

db.collectionNameHere.getIndexes();
db.collectionNameHere.dropIndex('date_1');
db.collectionNameHere.getIndexes();
Run Code Online (Sandbox Code Playgroud)

ps随时在您的问题或评论中提供任何其他数据,以帮助我/我们解决您的问题.

  • 所以看起来集合中有一堆索引已经被开发时间污染了.在此之前我已经删除了Robomongo的集合,但看起来它仍然保留了那些索引.感谢您的帮助和非常明确的答案. (3认同)