Mongoose .find查询无法返回集合数据问题求助
问题排查与解决
从你的代码和调试信息来看,核心问题大概率是模型与集合的名称不匹配,以下是具体排查和修复步骤:
1. 修正模型与集合的映射关系
调试日志显示Mongoose在查询TopicsDB集合,但你的代码用的是Question模型。Mongoose默认会把模型名转为复数小写作为集合名(比如Question对应questions),如果你的实际集合是TopicsDB,必须在定义模型时手动指定集合名:
// 定义模型时添加第三个参数指定集合名 const Question = mongoose.model('Question', yourSchema, 'TopicsDB');
2. 确认集合内确实存在数据
直接用MongoDB客户端(mongosh/Compass)执行查询:
db.TopicsDB.find({})
如果返回空数组,说明数据根本没写入集合,需要检查数据插入的代码逻辑。
3. 简化查询代码,避免回调与Promise混用
你当前的代码同时使用了回调函数和.clone().catch(),容易引发逻辑冲突。建议改用async/await的Promise风格,更易调试:
app.get('/', async (req, res) => { try { const found = await Question.find({}); console.log(found); res.send(found); } catch (err) { console.error(err); res.status(500).send("Some error occurred!"); } });
4. 验证数据库连接的正确性
检查Mongoose的连接URL,确保指向的是包含TopicsDB集合的数据库:
mongoose.connect('mongodb://localhost:27017/your_target_database', { useNewUrlParser: true, useUnifiedTopology: true });
替换your_target_database为实际存放TopicsDB的数据库名。
内容的提问来源于stack exchange,提问作者ram
相关产品推荐
相关产品推荐

