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

MongoDB自动创建测试库问题:如何正确获取已有集合数据?

问题解决:Mongoose匹配已有MongoDB集合并避免创建空集合

核心问题

你遇到的问题根源是Mongoose默认会将模型名称自动复数化作为集合名:

  • 你手动创建的目标集合是journey_detail(单数)
  • 但通过mongoose.model("journey_detail", journeySchema)定义模型时,Mongoose会自动将模型名转为复数形式journey_details,并尝试访问该集合;当找不到对应集合时,就会自动创建空的journey_details集合,而你的真实数据存储在journey_detail集合中,因此接口返回空数组。

解决方案

在定义模型时显式指定集合名称,覆盖Mongoose的自动复数化行为,有两种实现方式:

方式1:在Schema定义时指定集合名

修改Schema代码,添加collection属性绑定目标集合:

import mongoose from "mongoose";

export const journeySchema = mongoose.Schema({
  Departure_time: String,
  Return_time: String,
  Departure_Station_Id: Number,
  Departure_Station_Name: String,
  Return_Station_Id: Number,
  Return_Station_Name: String,
  Covered_Distance: Number,
  Duration: Number,
}, { collection: "journey_detail" }); // 显式指定目标集合名

export const journey_detail = mongoose.model("journey_detail", journeySchema);

方式2:在创建Model时指定集合名

调用mongoose.model时传入第三个参数,直接指定集合名:

import mongoose from "mongoose";

export const journeySchema = mongoose.Schema({
  Departure_time: String,
  Return_time: String,
  Departure_Station_Id: Number,
  Departure_Station_Name: String,
  Return_Station_Id: Number,
  Return_Station_Name: String,
  Covered_Distance: Number,
  Duration: Number,
});

// 第三个参数明确指定要关联的集合名
export const journey_detail = mongoose.model("journey_detail", journeySchema, "journey_detail");

额外优化点

  1. 请求函数判断逻辑修正:journey_detail.find()返回的是空数组(而非null),原代码中if (!JourneyDetails)永远不会触发,可改为判断数组长度:
    if (JourneyDetails.length === 0) {
      return res.status(404).json({ message: "Journey Details not found" });
    }
    
  2. 连接代码清理:原代码中mongoose.set()未传入有效参数,可移除或添加合理配置(比如关闭严格查询模式,允许查询Schema未定义的字段):
    mongoose.set('strictQuery', false);
    
  3. 字段匹配检查:确保CSV导入的字段名(大小写、下划线等)与Schema定义的Departure_time、Departure_Station_Id等完全一致,否则Mongoose会忽略不匹配字段,导致数据缺失。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 18:11:08