Mongoose空集合find查询耗时300ms问题求助
MongoDB查询在Mongoose中额外耗时250-300ms排查方案
所有通过Mongoose执行的MongoDB查询都额外耗时250-300ms,相同查询在MongoDB Compass中执行耗时0ms。环境信息:MongoDB和应用服务器均部署在AWS,实例规格t2.medium,安全组已配置连接规则。
Mongoose查询代码
const res = await payeeCollection.find({}); // 返回空数组,集合无文档
MongoDB连接工具代码(mongodb-util.js)
import mongoose from "mongoose"; import config from 'config'; const { mongo_db: { uri, database } } = config; if (!(uri && database)) { throw new Error('FATAL: Config File Missing'); } const mongoDbConnection = mongoose.createConnection(uri, { useNewUrlParser: true }); mongoDbConnection.on("connecting", () => { console.log("attempting to create a connection with mongodb") }); mongoDbConnection.on("open", () => { console.log('connection with mongodb successfully created') }); mongoDbConnection.on("error", (err) => { console.log('error in creating a connection with mongo db, error: ', err); }); export default mongoDbConnection;
集合模型代码(collectionSchema.js)
import { paymentLinkSchema } from "../schemas/paymentLink.schema.js"; import mongoDbConnection from "../utils/mongo-db.util.js"; import config from "config"; const { mongo_db: { database }, } = config; const checkWriterDb = mongoDbConnection.useDb(database); const PaymentLinkCollection = checkWriterDb.model( "paymentLink", paymentLinkSchema );
排查方向
- 补充连接池配置:当前代码未设置连接池参数,Mongoose默认连接池可能无法支撑并发,导致查询等待连接。添加连接池相关配置:
const mongoDbConnection = mongoose.createConnection(uri, { useNewUrlParser: true, maxPoolSize: 15, // 根据业务并发量调整 minPoolSize: 5, connectTimeoutMS: 3000 }); - 对比原生驱动耗时:跳过Mongoose的封装,直接用MongoDB原生驱动执行查询,排查是否是Mongoose的中间件/验证逻辑导致延迟:
// 用原生驱动执行查询 const db = mongoDbConnection.db; const res = await db.collection('paymentLink').find({}).toArray(); - 替换DNS为私有IP:AWS内部DNS解析可能存在延迟,将MongoDB URI中的主机名替换为实例私有IP,避免重复DNS查询开销。
- 检查安全组与网络:确认安全组规则是否允许服务器与MongoDB实例的27017端口双向通行,同时检查AWS内网是否存在跨AZ部署导致的网络延迟(尽量将服务器与MongoDB放在同一可用区)。
- 升级Mongoose版本:老旧版本的Mongoose可能存在性能瓶颈,升级到最新稳定版后重新测试。
- 开启MongoDB查询日志:在MongoDB实例上开启查询日志,对比Compass和Mongoose发起的请求细节,查看是否有额外的查询参数、索引校验等操作导致延迟。
内容的提问来源于stack exchange,提问作者Rachit Chandel
相关产品推荐
相关产品推荐

