Node.js 什么是ensureIndex?

Node.js 什么是ensureIndex?,node.js,mongodb,mongoose,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, back

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

需要帮助。

所以看起来您正在对用户名使用索引,并且应该是唯一的

每次执行写操作时,mongo都会确保索引得到尊重

现在重复密钥的问题,看起来您有一个用户名值为null的文档,现在下次您传递用户名为null的任何其他文档时,它会使唯一约束失效,这意味着只有一个用户名为null的文档

如果您希望使用唯一索引,并且还希望允许多个文档的用户名为null avlue,则可以使用带有索引的稀疏选项

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

db.users.dropIndex({username : 1});
db.users.ensureIndex({ username: 1 }, 
 { unique: true, background: true, sparse : true })
我猜您已经通过mongoose给出了索引定义,在这种情况下,只需使用稀疏选项更新那里的定义


更多关于

的信息实际上我设置索引时出错了。如果我现在想移除它,我该怎么做?我尝试dropIndex,但每次运行该程序时,它都会自动创建。我如何永久停止它。dropIndex是一种方式,如果它正在重新创建,则意味着您尚未从程序中删除索引签名。你也可以放弃收藏,但我想这是希望与希望的较量。最好是找出数据库从何处得到它必须重新创建的数据。ensureIndex或多或少是createIndex的别名。