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

调用GET请求时MongoDB仅返回[]的原因排查(附代码)

MongoDB GET请求返回空数组问题排查

问题描述

首次使用MongoDB,调用GET请求时仅返回[]。尝试过旧的数据库连接方式但无法成功连接,不确定代码是否存在错误。

相关代码

server.js 文件代码

const express = require("express");
const mongoose = require("mongoose");
const app = express();
const BusModel = require("./models/Bus");

mongoose.connect("mongodb+srv://das:dasismass@cluster0.j7nrcsd.mongodb.net/taskbusinfo?retryWrites=true&w=majority");

app.get("/getInfo", async (req, res) => {
  try {
    const data = await BusModel.find({});
    res.send(data);
  } catch (err) {
    console.log(err);
  }
});

app.listen(8000, () => {
  console.log("Server listening");
});

Bus.js 模型代码

const mongoose = require('mongoose');

const BusSchema = new mongoose.Schema({
  busnum:{
    type: Number,
    required: true
  },
  departure:{
    type: String,
    required: true
  },
  arrival:{
    type: String,
    required: true
  }
});

const BusModel = mongoose.model("businfo",BusSchema);

module.exports = BusModel;

相关截图

  • 数据库截图:数据库截图
  • GET请求截图:GET请求截图

问题解决

  1. 集合名称不匹配
    Mongoose默认会将模型名称转为复数形式作为集合名,你定义的模型是"businfo",它会自动去查询businfos集合,但数据库里的集合名是businfo(单数),这是查询空数组的核心原因。

    修复方式:修改Bus.js的模型定义,手动指定集合名:

    const BusModel = mongoose.model("businfo", BusSchema, "businfo");
    // 第三个参数显式指定集合名称为businfo
    
  2. 添加连接状态校验
    原代码未验证数据库是否连接成功,可添加连接状态监听,排查连接问题:

    mongoose.connect("mongodb+srv://das:dasismass@cluster0.j7nrcsd.mongodb.net/taskbusinfo?retryWrites=true&w=majority")
      .then(() => console.log("MongoDB连接成功"))
      .catch(err => console.error("MongoDB连接失败:", err));
    
  3. 校验字段类型一致性
    确认数据库中busnum字段的类型为数字,与Schema定义的Number类型一致,若数据库中存为字符串也会导致查询无结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 03:43:11