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连接实例对应的数据库:
- 若仅通过
mongoose.connect()建立了一个默认连接,模型会操作该连接指向的数据库中的categories集合。比如连接的是mxzconstruction就查该库的集合,连接databaseXYZ则查后者的。 - 若存在多个数据库连接(通过
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
相关产品推荐
相关产品推荐

