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

Mongoose无法读取MongoDB数据及多数据库集合识别问题

问题1:调用Categories.find()无法返回数据

你的Schema定义:

const mongoose = require("mongoose");

const { ObjectId, Number } = mongoose.Schema.Types;

const CategoriesSchema = new mongoose.Schema(
  {
    name: {
        type: String,
        required: true,
    },
    img: {
        type: String,
        required: true,
    }
  }
);

mongoose.model("Categories", CategoriesSchema, 'categories');

查询代码:

exports.getCategories = async (req, res) => {
console.log('GET CATEGORIES')

try {
    const categories = await Categories.find();
    console.log('categories', categories)
    res.status(200).json(categories)
} catch(error) {
    console.error(error);
    res.status(500).send('Problem getting categories.')
}
}

排查方向:

  • 数据库连接目标错误:检查Mongoose连接字符串是否明确指定了mxzconstruction数据库。比如连接代码应为mongoose.connect('mongodb://localhost:27017/mxzconstruction'),若未指定数据库名,默认会连接到test库,自然查不到目标集合的数据。
  • 模型未正确导出/导入:确认Schema文件中添加了module.exports = mongoose.model("Categories", CategoriesSchema, 'categories');,同时查询代码中正确导入了该模型,避免引用错误对象。
  • 目标集合无数据:通过MongoDB Compass或mongosh连接到mxzconstruction数据库,查看categories集合是否存在实际文档。若集合本身为空,find()会返回空数组。
  • 集合名称大小写问题:MongoDB在Linux/macOS环境下集合名称区分大小写,确认数据库中的集合名称确实是小写的categories,而非其他大小写形式。

问题2:多数据库下Mongoose的集合选择逻辑

当Mongoose模型未指定数据库时,它会绑定到当前使用的Mongoose连接实例对应的数据库:

  1. 若仅通过mongoose.connect()建立了一个默认连接,模型会操作该连接指向的数据库中的categories集合。比如连接的是mxzconstruction就查该库的集合,连接databaseXYZ则查后者的。
  2. 若存在多个数据库连接(通过mongoose.createConnection()创建多个连接实例),需在定义模型时明确指定连接:
    // 创建两个不同的连接
    const conn1 = mongoose.createConnection('mongodb://localhost:27017/mxzconstruction');
    const conn2 = mongoose.createConnection('mongodb://localhost:27017/databaseXYZ');
    
    // 分别绑定到不同连接的模型
    const Categories1 = conn1.model("Categories", CategoriesSchema, 'categories');
    const Categories2 = conn2.model("Categories", CategoriesSchema, 'categories');
    
    此时Categories1.find()查询mxzconstruction的集合,Categories2.find()查询databaseXYZ的集合。未指定连接的模型默认使用mongoose的全局默认连接。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 04:03:27