web-dev-qa-db-ja.com

MongoDBE11000重複キーエラー

最初の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の例

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

私が混乱しているのは、serに対してこれと同じ設定をしていることですが、新しいDayを作成する場合、この重複キーエラーが発生します。何が欠けているのか、間違っているのかわからない。ありがとう

7
Full-Hybrid

一意のインデックスdate_1を持つdays属性を持つdateコレクションのモデルがあったと思います。

これで削除しましたが、コレクションにはまだそのインデックスがあります。

だからそれはそれが言う理由です:

重複キーエラーコレクション:.daysインデックス:date_1 dupキー:{:null}

これは、date属性もnullである別のレコードを挿入していることを意味します。

コンソールからmongodbにログインし、これを実行してみてください。

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

p.s.私/私たちがあなたの問題を解決するのを助けるために、あなたの質問またはコメントで追加のデータを自由に提供してください。

18
num8er