使用Mongoose的useDb切换多库时出现createIndex弃用警告如何解决?
问题原因及解决方案
问题根源
你在mongoose.connect()中传入的useCreateIndex: true仅对默认连接生效,通过useDb()方法创建的独立数据库实例不会继承这个连接配置,所以在新实例下注册模型时,mongoose依然会调用已弃用的ensureIndex方法,触发警告。
解决方案
方案1:单独为useDb实例添加配置
调用useDb()时传入第二个参数,显式指定配置项即可:
const db = mongoose.connection.useDb("Authentication", { useCreateIndex: true }); const User = db.model<UserInterface>("User", UserSchema);
方案2:全局设置mongoose配置
如果需要创建多个多数据库实例,可直接设置全局mongoose配置,所有连接(包括默认连接、useDb创建的实例)都会继承该配置。
在调用mongoose.connect()前添加如下代码:
mongoose.set('useCreateIndex', true);
额外说明
你之前设置autoIndex: false能消除警告的原理是关闭了mongoose自动创建索引的逻辑,自然不会调用索引相关方法,但副作用是你在Schema中定义的索引(比如unique、index配置)不会自动同步到数据库,需要手动调用Model.createIndexes()完成创建,开发阶段会增加额外工作量,确实不是最优解。
内容的提问来源于stack exchange,提问作者camelCaseIsGoodPractice
相关产品推荐
相关产品推荐

