mongoose 拾遗
mongoose 文档中提到:
When your application starts up, Mongoose automatically calls
ensureIndex
for each defined index in your schema. Mongoose will callensureIndex
for each index sequentially, and emit an 'index' event on the model when all theensureIndex
calls succeeded or when there was an error. While nice for development, it is recommended this behavior be disabled in production since index creation can cause a significant performance impact. Disable the behavior by setting theautoIndex
option of your schema tofalse
, or globally on the connection by setting the optionconfig.autoIndex
tofalse
.
在开发过程中可以使用 ensureIndex
,这样每次改动数据库结构时,自动生成对应的 Index 。而在生产环境中,因为 ensureIndex
操作会影响性能,所以建议禁止使用。
在没有理解 MongoDB 的生成 Index 操作前,对上述解释可能迷惑。因为如果禁止 ensureIndex
,那么所有的 Index 不会生成,也就不会起效。但是注意这句话的前提条件是第一次创建 Collection 时。也就是说如果在创建 Collection 时,没有禁止 ensureIndex
那么相应的 Index 就会生成,以后即使禁止了 ensureIndex
,已经生成的 Index 依然有效。
总结: 在开发环境中启用 ensureIndex
,并且创建 Collection,然后在生产环境中禁止 ensureIndex
。