如何解决 Mongo 中的“MongoError:E11000 重复键错误集合”错误?

Vic*_*tor 7 javascript mongoose mongodb node.js

我已经为新项目创建了一个新的 Mongo 集合,但是当我尝试创建新用户时,出现以下错误:

\n
MongoError: E11000 duplicate key error collection: GestorMedico.users index: username_1 dup key: { username: null }\n
Run Code Online (Sandbox Code Playgroud)\n

我的用户架构如下:

\n
const { Schema, model } = require("mongoose");\n\nconst userSchema = new Schema({\n    nombreEmpresa: {\n        type: String,\n        unique: true,\n        required: true\n    },\n    email: {\n        type: String,\n        required: true\n    },\n    telefono: {\n        type: String,\n        required: true\n    },\n    contrase\xc3\xb1a: {\n        type: String,\n        required: true\n    }\n}, {\n    timestamps: true,\n    versionKey: false\n});\n\nmodule.exports = model("Users", userSchema);\n
Run Code Online (Sandbox Code Playgroud)\n

我的功能如下:

\n
userCtrl.createUser = async (req, res) => {\n    const newUser = new User(req.body);\n    \n    newUser.contrase\xc3\xb1a = await crypt.encryptPassword(newUser.contrase\xc3\xb1a);\n    \n    await newUser.save();\n    \n    res.status(200).json({\n        status: "OK",\n        message: "User created"\n    });\n};\n
Run Code Online (Sandbox Code Playgroud)\n

我的收藏看起来像:

\n

在此输入图像描述

\n

我重用了我的一个旧项目的后端,该项目在模式中有一个“用户名”。

\n

Bra*_*rse 11

当您尝试保存唯一字段(索引)而数据库中已有另一个字段(索引)时,会引发错误 E11000。

由于该字段似乎是用户名,在 userSchema 中不可见,因此我假设您的数据库中仍然存在该索引。

在 mongo Compass 页面上,您进行了屏幕截图,转到“索引”选项卡,刷新并删除用户名索引(如果存在)。

如果这不能解决问题,请继续通过代码打印出索引并检查那里,是否有您不想使用的索引db.collection.dropIndex()来删除它。 文档在这里

另请确保在您的 req.body 中nombreEmpresa传输该字段,因为当您要保存文档时需要该字段。

我希望这能解决它;)