为什么Mongoose在应用每次启动时都会调用model.init()方法?
model.init()自动调用的作用
- 核心职责是同步Schema定义的索引规则到MongoDB集合:你在Schema中配置的
index: true、唯一索引、复合索引等规则,都会在init()执行时和MongoDB对应集合的现有索引做比对,缺失的索引会自动创建,不需要开发者手动调用索引创建接口,减少冗余代码。 - 额外会完成模型初始化校验:检查Schema配置合法性、确认关联的MongoDB集合状态正常,保障后续该模型的CRUD操作可以正常执行。
- 补充说明:这个自动调用仅在应用首次连接MongoDB、模型第一次被初始化时触发,不是每次保存文档都会执行索引创建逻辑,不会产生重复建索引的性能损耗。
断开MongoDB连接时索引是否会被清空
不会。
MongoDB的索引属于集合的持久化元数据,是存储在磁盘上的,和应用端的连接状态没有关联。无论是应用主动断开连接、还是MongoDB服务重启,已经创建成功的索引都会永久保留,只有以下几种情况索引才会被删除:
- 手动调用
dropIndex()/dropIndexes()方法删除指定索引 - 直接删除整个集合
- 修改Schema的索引规则后,Mongoose同步索引时自动删除不再需要的冗余索引
相关代码片段参考:
const Schema = new mongoose.Schema({ name: { type: String, required: true, index: true } }); const Model = mongoose.model('Kitten', Schema); const instance = new Model({ name: 'Fluffy' }); await instance.save()
内容的提问来源于stack exchange,提问作者manidos
相关产品推荐
相关产品推荐

