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

Next.js中MongoDB查询返回空数组问题排查求助

排查Next.js中MongoDB查询返回空数组的解决方案

1. 集合名称不匹配问题

你提到集合名称是product,但代码中mongoose模型定义用的是:

export default mongoose.model("products", productSchema);

Mongoose默认会将模型名转换为小写复数形式作为集合名,若你的实际集合是product(单数),会导致查询的集合不对。解决方法:

  • 若集合是复数products,将模型名改为"Product"(Mongoose会自动转为products)
  • 若集合确实是单数product,显式指定集合名称:
export default mongoose.model("Product", productSchema, "product"); // 第三个参数指定实际集合名

2. Schema类型定义不规范

你的Schema中type用的是字符串"String",虽然Mongoose有兼容性,但规范写法应该用构造函数String/Boolean,避免潜在解析问题:

const productSchema = new mongoose.Schema({
  img: {
    type: String, // 去掉引号
    required: false,
  },
  category: {
    type: String,
    required: false,
  },
  price: {
    type: String,
    required: false,
  },
  description: {
    type: String,
    required: false,
  },
  heading: {
    type: String,
    required: false,
  },
  available: {
    type: Boolean, // 去掉引号
    required: false,
  },
});

3. 数据库连接逻辑优化

当前的connectMongo函数没有处理重复连接问题,Next.js的API路由可能重复调用连接导致异常,修改为检查连接状态后再连接:

import mongoose from "mongoose";

const connectMongo = async () => {
  // 检查是否已连接
  if (mongoose.connection.readyState === 1) {
    return Promise.resolve();
  }
  // 移除过时的useNewUrlParser,当前Mongoose版本已默认启用
  return mongoose.connect(process.env.MONGODB_URI);
};

export default connectMongo;

4. API路由错误处理修复

你的错误处理中res.status(err)是错误的,err是Error对象而非状态码,应统一返回500状态并携带错误信息:

export default async function handler(req, res) {
  try {
    await connectMongo();
    const response = await products.find();
    res.status(200).json(response);
  } catch (err) {
    console.error(err); // 用console.error更适合错误日志
    res.status(500).json({ error: err.message }); // 返回错误信息便于排查
  }
}

5. 基础排查步骤

  • 确认process.env.MONGODB_URI配置正确,能正常连接到目标数据库
  • 检查MongoDB数据库中product(或products)集合是否有数据
  • 在API路由中添加日志,确认连接状态和查询结果:
await connectMongo();
console.log("数据库连接状态:", mongoose.connection.readyState); // 1表示已连接
const response = await products.find();
console.log("查询到的数据条数:", response.length);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 14:55:16