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

Mongoose find()返回空数组:MongoDB数据读取失败求助

解决Mongoose查询MongoDB返回空数组的问题

核心问题排查与修复方案

1. 数据库连接未指定目标库

你的MongoDB连接URI缺少目标数据库名称,导致Mongoose默认连接到test数据库,而你的数据实际存储在travel-app库中。

修复:修改连接字符串,在末尾添加数据库名:

const dbURI = 'mongodb+srv://<用户名>:<密码>@travel-app.jdkjive.mongodb.net/travel-app?retryWrites=true&w=majority';

2. 模型与集合名称不匹配

Mongoose默认会将模型名转换为小写复数形式的集合名。你定义模型时用了'Trips',但Mongoose会自动查询trips(全小写)集合,而你的实际集合是Trips(首字母大写)。

修复:定义模型时显式指定集合名称:

const Trip = mongoose.model('Trip', tripSchema, 'Trips');
// 第三个参数强制指定关联的集合为'Trips'

3. Schema字段类型与数据库数据不匹配

  • Schema中cost字段定义为String,但数据库里的cost是数字类型({"$numberInt":"500"}),Mongoose的类型校验会过滤掉不匹配的文档。
  • Schema中startdate/enddate是Date类型,但数据库里存储的是字符串格式日期,同样会导致类型不匹配。

修复:调整Schema字段类型匹配数据实际存储格式:

const tripEventSchema = new mongoose.Schema({
    name: String,
    description: String,
    startdate: String, // 改为String匹配数据库中的日期字符串
    enddate: String,
    cost: Number, // 改为Number匹配数据库中的数字类型
    tripevent: String
});

const tripSchema = new mongoose.Schema({
    name: String,
    description: String,
    startdate: String,
    enddate: String,
    tripevents: [tripEventSchema]
});

4. 验证模型导入路径正确性

路由代码中导入模型的路径是../models/event,确认你的模型文件是否确实在该路径下(比如文件名是否为event.js),如果文件名是trip.js,需要修正路径:

const Trip = require('../models/trip'); // 确保路径与实际文件名一致

验证步骤

  1. 重启服务器后重新请求localhost:3000/events
  2. 在数据库连接成功的回调中添加日志,确认当前连接的数据库:
mongoose.connect(dbURI, { useNewUrlParser: true, useUnifiedTopology: true })
  .then(() => {
    console.log('Connected to the database');
    console.log('Current database:', mongoose.connection.db.databaseName); // 输出当前连接的库名
  })
  .catch(err => {
    console.error('Error connecting to the database:', err);
  });

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 12:10:17