当前位置: 首页 > 面试题库 >

猫鼬-由:: 11000 E11000重复键错误索引引起?

施飞雨
2023-03-14
问题内容

为什么会出现此重复错误- Error creating new user: WriteError({"code":11000,"index":0,"errmsg":"insertDocument :: caused by :: 11000 E11000 duplicate key error index

提供的所有字段都不为空。

架构:

// Declare schema
var userSchema = new mongoose.Schema({
    username: {type: String, required: true, index: {unique: true}},
    password: {type: String, required: true},
    created_on: {type: Date, default: Date.now}
});

发布:

// Create - POST
// Create the first method of the API : POST used to create a new user.
router.post("/", function(req, res, next) {
    // Get values from POST request
    var username = req.body.username;
    var password = req.body.password;
    console.log(req.body); // { username: 'tealou', password: 'test123' }

    // Create new user document
    User.create({
        username: username,
        password: password
    }, function(err, user) {
        console.log(user); // undefined
        if (err) {
            console.log("Error creating new user: " + err);
            res.send("Error creating new user.");
        } else {
            console.log("POST creating new user: " + username);
            res.json(user);
        }
    })
});

错误:

创建新用户时出错:WriteError({:“ 11000,” index“:0,” errmsg“:” insertDocument ::由::
11000 E11000重复键错误导致:iotdb.users。$ name_1 dup key:{: null}“,” op“:{”用户名“:”
tealou“,”密码“:” $ 2a $ 10 $
7mPGND2FRuJDGnXaVTnkru2.xsGn2Ksf8veBKur4ouD9VUNj60RaC“,” _ id“:”
5786020088245d33140d6f94“:”“创建55:28.279Z“,” __ v“:0}})

有任何想法吗?


问题答案:

您最初name在架构中有一个称为的字段,该字段设置为unique

我怎么知道?由于错误告诉我:

duplicate key error index: **iotdb.users.$name_1**

您将字段重命名为username,但没有删除旧索引。在这种情况下,默认情况下,MongoDB会将不存在的字段的值设置为null

相关文档在这里:

如果文档在唯一索引中没有索引字段的值,则索引将为此文档存储一个空值。由于存在独特的约束,MongoDB将只允许一个缺少索引字段的文档。

要解决此问题,您需要删除重命名name字段的索引。



 类似资料:
  • 为什么会出现此重复错误-? 提供的所有字段都不是空的。 架构: 职位: 错误: 创建新用户时出错:WriteError({“code”:11000,“index”:0,“errmsg”:“insertDocument::由引起::11000 E11000重复密钥错误索引:iotdb.users.$name_1 dup key:{:null}”,“op:{“username”:“tealou”,“p

  • 问题内容: 我有重复密钥的问题。很长一段时间找不到答案。请帮助我解决此问题或解释为什么我得到重复的密钥错误。 但是在监视器中,我使用upsert,所以为什么会出现重复错误? monitor.js:62-70 监控架构 指数 并增加财产 utils.js 问题答案: 导致插入文档的ups不是完全原子的操作。将ups视为执行以下离散步骤: 查询标识的文档以进行增补。 如果文档存在,则自动更新现有文档。

  • 问题内容: 以下是我在模型中的架构- 这就是我在控制器中使用它的方式- 这就是我将其保存在数据库中的方式- 错误 - 我检查了数据库集合,没有这样的重复条目,让我知道我在做什么错吗? 仅供参考- 和被获取的值。 我也检查了这篇文章,但没有帮助STACK LINK 如果我将其完全删除,则它将插入文档,否则即使我在local.email中有条目,也会引发错误“ Duplicate”错误 问题答案: 错

  • 我正在使用mongojs和Node.js在mongob中插入一个文档。这是一个REST应用编程接口,只有一个mongojs实例(具有本地驱动器)。每次,有一个api调用,SAME mongojs对象用于执行mongob操作。现在,我在尝试插入文档时得到以下错误。 该文档总是唯一的,我尝试了,它显示索引在_id。有人能帮助我如何解决这个问题吗?

  • 问题内容: 我试图让MongoDB根据其索引检测重复值。我认为这在MongoDB中是可能的,但是通过Mongoose包装器,事情似乎被打破了。所以对于这样的事情: 我可以用同一封电子邮件保存2个用户。真是 在这里也表达了同样的问题:https : //github.com/LearnBoost/mongoose/issues/56,但是该线程很旧,导致无处可去。 现在,我正在手动调用数据库以查找用

  • 问题内容: 根据Mongoose 文档中关于和/的内容: 当您的应用程序启动时,Mongoose会自动调用架构中每个已定义的索引。虽然有利于开发,但建议在生产中禁用此行为,因为创建索引会严重影响性能。通过将架构选项设置为false来禁用该行为。 这似乎指示从Mongoose删除自动索引,然后再部署以优化Mongoose,而从指示Mongo在应用程序启动时遍历所有索引开始,这似乎是有道理的。 在生产