什么是ensureIndex?

我是一个nodejs的学生,并创build一些练习项目。 我最近在我的控制台上看到了这个,当我运行mongoose.set("debug", true)

这是什么意思。 为什么它向我显示一个错误 – 重复密钥。

 Mongoose: users.ensureIndex({ username: 1 }, { unique: true, background: true }) Mongoose: posts.ensureIndex({ username: 1 }, { unique: true, background: true }) 

我怎样才能阻止这个创build像这样并修复错误。

 E11000 duplicate key error collection: cms_demo1.poosts index: username_1 dup key: { : null } 

需要帮忙。

所以它看起来像你使用用户名的索引,应该是唯一的。

每当你做一个写操作,mongo确保索引被尊重。

现在重复密钥的问题,看起来像你有一个文档,其中用户名值为空,现在下一次你传递任何其他文档的用户名为空,它使唯一约束无效,这意味着可能只有一个文档与用户名为空。

如果你想使用唯一索引,也想允许多个文档的用户名空值,你可以使用索引稀疏选项。

您可以删除索引并使用稀疏选项重新创build索引

 db.users.dropIndex({username : 1}); db.users.ensureIndex({ username: 1 }, { unique: true, background: true, sparse : true }) 

我猜你已经通过mongoose给出了索引定义,在这种情况下只需用稀疏选项更新那里的定义。

更多关于稀疏