javascript - Mongodb 引用重复?

标签 javascript node.js mongodb

我有这个错误,我似乎无法理解我做错了什么。

在我的数据库中,我有一个名为问题的对象,问题引用了主题和用户。当我尝试发布问题时,我收到一个奇怪的错误。

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"});
            }
        });

我尝试过的

  1. 删除所有问题,然后我可以发布,但只有一个......
  2. 删除引用并将其保留为字符串。没有区别。
  3. 重新启动服务器几次。

最佳答案

尝试从主题中删除unique: true。我认为 QuestionSchema 继承了唯一的属性,一旦您尝试保存同一主题的两个不同问题,您将获得重复的 key 。

请按照以下步骤操作:

  1. 从模型中删除 unique: true
  2. 通过在终端中输入 db.questions.getIndexes() 查找索引名称。
  3. 通过输入 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/

相关文章:

javascript - 如何使用Electron.js彼此相邻显示自定义Windows消息框按钮

node.js - 日期过滤在 mongodb 中不起作用

Mongodb - 没有结果返回时性能不佳

mongodb - Meteor mongo shell 最新吗?

java - Spring Controller "redirect"

javascript - 如何在pm2中部署feathersjs应用程序?

Javascript n00b - 获取 YouTube API v3 视频描述而不是标题(现有代码)

javascript - 使用 html5 数据列表自定义自动完成

javascript - 本地 gulp 安装后缺少 node_modules

javascript - 如何在 Javascript 中公开对象的数据?