调用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请求截图:

问题解决
集合名称不匹配
Mongoose默认会将模型名称转为复数形式作为集合名,你定义的模型是"businfo",它会自动去查询businfos集合,但数据库里的集合名是businfo(单数),这是查询空数组的核心原因。修复方式:修改Bus.js的模型定义,手动指定集合名:
const BusModel = mongoose.model("businfo", BusSchema, "businfo"); // 第三个参数显式指定集合名称为businfo添加连接状态校验
原代码未验证数据库是否连接成功,可添加连接状态监听,排查连接问题: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));校验字段类型一致性
确认数据库中busnum字段的类型为数字,与Schema定义的Number类型一致,若数据库中存为字符串也会导致查询无结果。
内容的提问来源于stack exchange,提问作者vvK
相关产品推荐
相关产品推荐

