我是一名nodejs学生并创建了一些练习项目。我运行mongoose.set("debug", true)
时,我最近在我的控制台上看到了这个。
这是什么意思。为什么它会向我显示错误 - 重复密钥。
Mongoose: users.ensureIndex({ username: 1 },
{ unique: true, background: true })
Mongoose: posts.ensureIndex({ username: 1 },
{ unique: true, background: true })
如何停止此操作以创建此类并修复错误。
E11000 duplicate key error collection: cms_demo1.poosts index: username_1 dup key:
{ : null }
需要帮助。
答案 0 :(得分:0)
所以看起来你在用户名上使用索引,这应该是唯一的。
每次执行写操作时,mongo都会确保遵循索引。
现在重复密钥的问题,看起来你有一个用户名值为null的文档,现在下次你传递任何其他用户名为null的文件时,它会使唯一约束无效,这意味着只有一个用户名为null的文档。
如果要使用唯一索引并且还希望允许多个文档的用户名为空avlue,则可以使用带索引的稀疏选项。
您可以删除索引并使用稀疏选项
重新创建它db.users.dropIndex({username : 1});
db.users.ensureIndex({ username: 1 },
{ unique: true, background: true, sparse : true })
我猜你已经通过mongoose给出了索引定义,在这种情况下只需用稀疏选项更新那里的定义。
更多关于sparse