什么是ensureIndex?

时间:2017-08-02 13:08:20

标签: node.js mongodb mongoose

我是一名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 }

需要帮助。

1 个答案:

答案 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