我有这个错误,我似乎无法理解我做错了什么。
在我的数据库中,我有一个名为问题的对象,问题引用了主题和用户。当我尝试发布问题时,我收到一个奇怪的错误。
E11000 duplicate key error index: codenoname.questions.$subject.name_1 dup key: { : null }
我的问题架构:
var questionSchema = mongoose.Schema({
title: { type : String , required : true},
text: { type : String , required : true},
subject: {type:String, ref: 'Subject', required: true},
createdBy: {type: String, ref:'User', required: true},
difficulty: { type : String , required : true},
alternatives: [{alternative: {type:String, required:true}, isCorrect: {type:Boolean, required:true}}]
});
和我的主题
var subjectSchema = mongoose.Schema({
name: { type : String , required : true, unique:true}
});
保存方法:
var question = new Question(
{title: title,
text: text,
subject: ObjectId(subject),
difficulty: difficulty,
createdBy: id,
alternatives:alternatives
});
question.save( function(err, newQuestion) {
if(err) {
res.status(400).json({err:err});
} else {
res.status(200).json({status:"Question added"});
}
});
我尝试过的
- 删除所有问题,然后我可以发布,但只有一个......
- 删除引用并将其保留为字符串。没有区别。
- 重新启动服务器几次。
最佳答案
尝试从主题中删除unique: true
。我认为 QuestionSchema 继承了唯一的属性,一旦您尝试保存同一主题的两个不同问题,您将获得重复的 key 。
请按照以下步骤操作:
- 从模型中删除
unique: true
- 通过在终端中输入
db.questions.getIndexes()
查找索引名称。 - 通过输入
db.questions.dropIndex(name)
将其删除,其中name
是第 2 步中的“name”
属性<
来 self 的数据库的示例,我将从用户名中删除唯一属性:
> db.accounts.getIndexes()
[
{
"v" : 1,
"key" : {
"_id" : 1
},
"name" : "_id_",
"ns" : "passport_local_mongoose_express4.accounts"
},
{
"v" : 1,
"unique" : true,
"key" : {
"email" : 1
},
"name" : "email_1",
"ns" : "passport_local_mongoose_express4.accounts",
"background" : true
},
{
"v" : 1,
"unique" : true,
"key" : {
"username" : 1
},
"name" : "username_1",
"ns" : "passport_local_mongoose_express4.accounts",
"background" : true
}
]
> db.accounts.dropIndex('username_1')
关于javascript - Mongodb 引用重复?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38454625/