根据Mongoose 文档中关于MongooseJS和MongoDB/的内容Node.js:
MongooseJS
MongoDB
Node.js
当您的应用程序启动时,Mongoose会自动调用ensureIndex架构中每个已定义的索引。虽然有利于开发,但建议在生产中禁用此行为,因为创建索引会严重影响性能。通过将autoIndex架构选项设置为false来禁用该行为。
ensureIndex
autoIndex
这似乎指示从Mongoose删除自动索引,然后再部署以优化Mongoose,而从指示Mongo在应用程序启动时遍历所有索引开始,这似乎是有道理的。
在生产代码中处理索引的正确方法是什么?也许外部脚本应该生成索引?或者,ensureIndex如果单个应用程序是集合的唯一读取器/写入器,也许是不必要的,因为每当发生DB写操作时,该应用程序都会继续执行索引?
编辑: 补充,MongoDB中提供了良好的文档对 如何 做索引,但不 为什么 还是 当 明确索引指令应该做的。在我看来,编写应用程序应在具有现有索引的集合上自动使索引保持最新状态,这ensureIndex实际上是一次性的事情(在应用新索引时完成),在这种情况下,猫鼬autoIndex应该是在正常服务器重启下无操作。
我从未理解过为什么Mongoose文档如此广泛地建议禁用autoIndex生产。一旦添加了索引,随后的ensureIndex调用将简单地看到该索引已经存在,然后返回。因此,它仅在首次创建索引时才对性能产生影响,并且那时集合通常是空的,因此无论如何创建索引都会很快。
我的建议是保持autoIndex启用状态,除非您遇到特殊情况会给您带来麻烦。例如,如果您想向具有数百万个文档的现有集合中添加新索引,并且希望对其创建时间进行更多控制。