MongoDB E11000 重复键错误

Posted

技术标签:

【中文标题】MongoDB E11000 重复键错误【英文标题】:MongoDB E11000 duplicate key error 【发布时间】:2017-02-20 16:26:47 【问题描述】:

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

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

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 示例

    "name": "Monday"- 这会很好地反映在数据库中 "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 时,会出现此重复键错误。不知道我错过了什么或做错了什么。谢谢

【问题讨论】:

【参考方案1】:

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

现在您已将其删除,但集合仍然具有该索引。

这就是为什么它说:

重复键错误收集:.days 索引:date_1 重复键: : null

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

从控制台登录 mongodb 并尝试这样做:

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

附言随时在您的问题或 cmets 中提供任何其他数据,以帮助我/我们解决您的问题。

【讨论】:

所以看起来集合中有一堆索引在开发过程中被污染了。在此之前我已经放弃了与 Robomongo 的集合,但看起来它仍然保留了这些索引。感谢您的帮助和非常明确的答案。 @Full-Hybrid 很高兴这很有帮助 (; 嗨,@num8er 我们是否需要每次都删除索引.. 这是一个正确的解决方案吗? @RaviSharma 当然不是。这是情境性的。更好地使用 robo3t 或其他工具并正确管理索引【参考方案2】:

删除集合并再次运行

【讨论】:

这将如何解决问题所提出的问题? 我不知道为什么或如何,但这对我有用。【参考方案3】:

我遇到了类似的问题并遇到了这个问题并阅读了我上面的评论。起初我以为他在拖钓,但我有一个难以解释的顿悟。我删除了集合并存储了新文档,奇迹般地错误现在消失了。可能是 mongodb 的 bug,我不确定。

【讨论】:

这里也一样。我放弃了收藏,现在它可以工作了。

以上是关于MongoDB E11000 重复键错误的主要内容,如果未能解决你的问题,请参考以下文章

MongoDB E11000 重复键错误

E11000 mongodb mongoose 中的重复键错误索引

E11000 mongodb mongoose 中的重复键错误索引

E11000 mongodb mongoose 中的重复键错误索引

E11000 MongoDB/Mongoose 重复键错误

插入期间:E11000 重复键错误索引