Mongoose 错误 "MongoError: E11000 duplicate key error collection" 的解决方案

在开发过程中,有时在使用 Mongoose 连接 MongoDB 时,会遇到一个常见的错误 - "MongoError: E11000 duplicate key error collection"。这个错误的原因是 Mongoose 尝试将文档插入到 MongoDB 集合中,但是与现有文档中的某个唯一字段(如 _id)存在重复值,因此 MongoDB 拒绝了插入操作。

解决方案

这个错误有很多可能的解决方案,下面介绍其中的几种:

1. 查找重复的 _id

MongoDB 中的 _id 字段必须是唯一的,因此如果遇到 "MongoError: E11000 duplicate key error collection" 错误,最初的处理方式应该是检查是否有重复的 _id。

在 MongoDB 的 shell 中使用以下命令可以查找重复的 _id:

your_collection 替换为你的集合名称,如果有重复的 _id,则会返回包含有多个文档的结果。

2. 设置唯一索引

如果你的 MongoDB 集合存在多个唯一字段,那么你需要为每个唯一字段设置唯一索引。

在 Mongoose 中,可以使用 index 方法设置唯一索引。例如,下面的代码将创建一个名为 email 的唯一索引:

这种方式可以避免出现重复的唯一字段,从而解决 "MongoError: E11000 duplicate key error collection" 错误。

3. 添加 unique 标志

和创建唯一索引类似,还可以在 Mongoose 中使用 unique 标志来确保某个字段是唯一的。例如,下面的代码将为 email 字段添加 unique 标志:

这种方式不会创建唯一索引,而是会在尝试将文档插入 MongoDB 集合时验证唯一性。如果 email 字段已经存在于集合中,则将阻止插入操作并返回 "MongoError: E11000 duplicate key error collection" 错误。

示例代码

下面是一个包含唯一索引和 unique 标志的 Mongoose 模式示例:

这份代码将在 MongoDB 中创建一个名为 User 的集合,并为 email 字段创建一个唯一索引。它执行了两个插入操作:第一个操作不会出现错误,然而,第二个操作会因为试图添加已经存在的 email 值而出现 "MongoError: E11000 duplicate key error collection" 错误。

总结

"MongoError: E11000 duplicate key error collection" 错误很常见,但是有很多方法可以解决这个问题。使用上述的任何一种解决方案都可以避免重复值的出现,让你的应用程序正常工作。

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/65a4e3bbadd4f0e0ffd3e417


纠错反馈