MongoDB E11000 重复键错误

MongoDB E11000 duplicate key error

我有一个模型在第一个 POST 之后一直出错。我正在创建一个日程安排应用程序,它是 X 天,包含房间和房间的时间段。

我遇到的问题是在数据库中创建日期对象。为了便于阅读,我只准备一个键值对

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;

例子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
  }
}

让我感到困惑的是,我对 User 进行了相同的设置,但是在创建新的 Day 时,这个出现重复键错误。不确定我遗漏了什么或做错了什么。谢谢

我认为您的 days 集合模型具有 date 属性,该属性具有唯一索引 date_1

现在你已经删除了它,但集合仍然有那个索引。

所以这就是它说的原因:

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

这意味着您要插入另一条记录,其中 date 属性也为空。

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

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

p.s。请随时在您的问题或评论中提供任何其他数据,以帮助 me/us 解决您的问题。

再次删除 集合 和 运行

我遇到了类似的问题并且 运行 遇到了这个问题,并阅读了我上面的评论。起初我以为他是在挑衅,但我顿悟了,这很难解释。我删除了集合并存储了新文档,奇迹般地错误现在消失了。也许这是一些 mongodb 错误,我真的不确定。

虽然@num8er 的回答是完全正确的,但更简单的方法是: 转到您的 MongoDB collections => 您将看到 indexes 选项卡,当您转到该选项卡时,您将看到您创建的不同索引行,然后只需按 Drop Index 按钮你不想要的行或只是放下所有这些并重新开始。

我也遇到了同样的错误。

E11000 duplicate key error collection: mydb.users index: token_1 dup key: { token: null }

Example

回答- 我只是从数据库中删除集合。然后我 post 一些数据,它工作正常。