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

Mongoose find()查询中用变量调用模型:解决返回undefined问题

解决Mongoose中用变量传入模型名执行find()的问题

我来帮你搞定这个问题!你遇到的问题根源是用错了引用Mongoose模型的方式——[schemaName]本质是创建了一个包含字符串的数组,数组根本没有find()方法,所以自然返回undefined。下面给你两种可行的解决方案:

方案1:直接使用已导入的模型变量

如果你已经通过require拿到了模型,直接用这个变量就好,完全不需要额外的字符串变量:

var Collection1 = require('...schema路径'); 
// 直接用导入的模型调用find()
var cursor = Collection1.find().cursor(); 

方案2:动态通过模型名字符串获取模型(适合动态场景)

如果你的业务场景确实需要用字符串动态指定模型名,要通过Mongoose的mongoose.model()方法来获取已注册的模型,步骤如下:

第一步:确保你的Schema文件正确注册了模型

在你的schema文件里,必须用mongoose.model()把模型注册到Mongoose实例中,第一个参数就是模型的名称(要和你后面用的schemaName完全一致):

const mongoose = require('mongoose');
// 定义你的Schema
const collectionSchema = new mongoose.Schema({
  // 你的字段定义,比如:
  name: String,
  createdAt: Date
});
// 注册模型,第一个参数是模型名,后续通过这个名字获取
module.exports = mongoose.model('Collection1', collectionSchema);

第二步:在主代码中通过字符串获取模型并执行查询

const mongoose = require('mongoose');
// 先导入模型文件,确保模型被注册到Mongoose中
require('...schema路径'); 
var schemaName = 'Collection1'; 
// 通过模型名字符串获取模型实例
const TargetModel = mongoose.model(schemaName);
// 现在可以正常调用find()了
var cursor = TargetModel.find().cursor(); 

注意事项

  • 模型名要完全匹配:schemaName的字符串必须和你注册模型时传入的第一个参数完全一致(包括大小写),否则Mongoose找不到对应的模型。
  • 必须先注册模型:如果没有提前导入schema文件(也就是没执行注册模型的代码),mongoose.model(schemaName)会返回undefined,这点要特别注意。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 03:54:06