我有一个模型在第一次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);
};
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
}
}
我感到困惑的是,我为用户设置了相同的设置,但是当涉及到新的日时,会出现此重复键错误。不确定我错过了什么或做错了什么。感谢
答案 0 :(得分:15)
我认为您拥有days
集合的模型,其date
属性具有唯一索引date_1
。
现在您已将其删除,但集合仍然具有该索引。
这就是为什么它说:
重复密钥错误集合:.days index:date_1 dup key:{:null}
表示您正在插入另一条记录date
属性也为空。
从控制台登录mongodb并尝试执行此操作:
db.collectionNameHere.getIndexes();
db.collectionNameHere.dropIndex('date_1');
db.collectionNameHere.getIndexes();
P.S。随时在您的问题或评论中提供任何其他数据,以帮助我/我们解决您的问题。
答案 1 :(得分:1)
删除收藏集,然后再次运行
答案 2 :(得分:-2)
我遇到了类似的问题并遇到了这个问题并阅读了我上面的评论。一开始我以为他是在拖钓,但我顿悟了,很难解释。我删除了集合并存储了新文档,并且奇迹般地错误消失了。也许这是一些 mongodb 的错误,我不确定。