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

MERN Stack新手MongoDB查询返回空数组问题求助

问题描述

我是MERN Stack新手,在从MongoDB数据库获取数据时遇到问题。数据库连接已成功建立,Schema和Model已开发完成,数据库中手动录入的数据与Schema完全匹配,但调用查询接口时返回空数组[]。相关代码及数据库信息如下:

数据库截图

MongoDB数据库截图

Schema与Model代码

const mongoose = require("mongoose");

const quoteSchema = new mongoose.Schema({
  name: {
    type: "string",
    unique: true,
    trim: true,
  },
  email: {
    type: "string",
    unique: true,
    trim: true,
  },
  heading: {
    type: "string",
    unique: true,
    trim: true,
  },
  content: {
    type: "string",
    unique: true,
    trim: true,
  },
});

const Quote = mongoose.model("Quote", quoteSchema);

module.exports = Quote;

MongoDB文档内容

_id: 63fa9afdb9a2ce7ac01
name: "name"
email: "email@gmail.com"
heading: "heading"
content: "Here goes content"

服务器与路由代码

const express = require("express");
const mongoose = require("mongoose");
const Quote = require("./modals/quoteModal");
const app = express();
mongoose
  .connect(DB, {
    useNewUrlParser: true,
    useUnifiedTopology: true,
  })
  .then(() => {
    console.log("Database connection successful");
  })
  .catch((error) => {
    console.log(`Database is not connected ${error}`);
  });

app.get("/quotes", (req, res) => {
  Quote.find({}, (err, quotes) => {
    if (err) {
      console.log(err);
      res.status(500).send(err);
    } else {
      console.log(quotes);
      res.status(200).json({
        quotes,
      });
    }
  });
});

const host = "localhost";
const port = process.env.PORT || 8000;

app.listen(port, () => {
  console.log(`MERN-App is running on http://${host}:${port}`);
  console.log(Quote.schema.obj);
});
解决方案

1. 修正Schema中的类型定义

你的Schema里把字段类型写成了字符串 "string",但Mongoose要求使用内置的String构造函数(首字母大写)。这会导致Mongoose无法正确识别字段类型,进而无法匹配数据库中的数据,返回空数组。

修改后的Schema代码:

const mongoose = require("mongoose");

const quoteSchema = new mongoose.Schema({
  name: {
    type: String, // 改为大写的String
    unique: true,
    trim: true,
  },
  email: {
    type: String,
    unique: true,
    trim: true,
  },
  heading: {
    type: String,
    unique: true,
    trim: true,
  },
  content: {
    type: String,
    unique: true,
    trim: true,
  },
});

const Quote = mongoose.model("Quote", quoteSchema);

module.exports = Quote;

2. 检查集合名称匹配

Mongoose会自动将Model名称("Quote")转为小写复数形式作为集合名,也就是quotes。请确认你的MongoDB数据库中,数据所在的集合名称确实是quotes,而不是其他名称(比如quote单数)。如果集合名不匹配,也会导致查询不到数据。

如果你的集合名是单数quote,可以在定义Model时指定集合名称:

const Quote = mongoose.model("Quote", quoteSchema, "quote"); // 第三个参数指定集合名

3. 建议使用async/await优化查询代码

回调式的查询写法可以换成更清晰的async/await,便于错误处理:

app.get("/quotes", async (req, res) => {
  try {
    const quotes = await Quote.find({});
    console.log(quotes);
    res.status(200).json({ quotes });
  } catch (err) {
    console.log(err);
    res.status(500).send(err);
  }
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 13:57:49