You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Mongoose 8.9.5查询性能异常问题排查求助

Mongoose v8.9.5 查询性能异常排查问题

升级Mongoose从v6.8.1到v8.9.5、MongoDB服务器从6.0.0到8.0.4后,出现严重查询性能问题:即使是带索引的简单查询,执行时间也始终至少1秒,但MongoDB的explain输出显示数据库端执行时间可忽略不计。

怀疑该问题与Mongoose处理查询或与MongoDB交互的方式有关,即便配置了正确的索引、MongoDB报告执行耗时极短,问题仍持续存在。

环境信息

  • Node.js版本:v18.20.4
  • Mongoose版本:v8.9.5
  • MongoDB驱动版本:v6.12.0(Mongoose依赖)
  • MongoDB服务器版本:8.0.4(Atlas集群)
  • 操作系统:Amazon Linux 2(AWS Lambda)

核心疑问:这是否是Mongoose v8.9.5的Bug?还可尝试哪些排查方法?

示例场景

数据模型Schema

const TransactionSchema = new mongoose.Schema({
  businessId: { type: mongoose.Schema.Types.ObjectId, required: true },
  acquirerTransactionId: { type: String, index: true },
  partnerReferenceId: { type: String, index: true },
  tempUniqueId: { type: String, index: true },
  transactionTime: { type: Date, index: true },
});

const Transaction = mongoose.model("Transaction", TransactionSchema);

数据库连接代码

import mongoose from "mongoose";

mongoose.Promise = global.Promise;
let isConnected;

export const connectToDatabase = () => {
  if (isConnected) {
    console.log("DB connection was previously established");
    return Promise.resolve();
  }
  console.log("Establishing a new DB connection...");
  console.log(`Mongoose version: ${mongoose?.version}`);

  const DB_URL = "mongodb+srv://<username>:<password>@<cluster>.mongodb.net/dbname";
  mongoose.set("strictQuery", true);

  return mongoose
    .connect(DB_URL, { maxIdleTimeMS: 60000 })
    .then((db) => {
      isConnected = db.connections[0].readyState;
      try {
        const connection = mongoose.connection;
        const driverInfo = connection?.client?.s?.options?.metadata;

        if (driverInfo) {
          console.log(`MongoDB Driver Info:`, driverInfo);
        } else {
          console.log("Driver info is not accessible.");
        }
      } catch (error) {
        console.error("Error accessing MongoDB driver info:", error);
      }
    })
    .catch((err) => {
      console.error("Connection error:", err);
    });
};

connectToDatabase();

查询代码

const result = await Transaction.findOne({
  $or: [
    { acquirerTransactionId: "502109000037" },
    { partnerReferenceId: "502109000037" },
    { tempUniqueId: "502109000037" },
  ],
  businessId: "673e24037abe20cc29e0225b",
});
console.log("Query result:", result);

该查询耗时约1秒,但MongoDB的explain显示数据库执行时间仅约1毫秒。

已尝试的排查步骤

  • 检查MongoDB:直接执行查询速度快,explain()无异常
  • 确认索引正确:涉查询字段均配置合适索引
  • 开启Mongoose调试模式:验证查询语句正确
  • 测试旧版Mongoose:旧版本性能更优
  • 重装依赖包:排除损坏依赖问题

新发现

Mongoose 6.12.9无此问题,但6.13.8及更高版本(含8.x、7.x系列)搭配MongoDB Atlas 8.0.4时均存在明显延迟,仅6.12.9响应快速。

内容的提问来源于stack exchange,提问作者totomers

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 19:55:18