已配置MongoDB数据库和集合,使用Mongoose却无法查询到数据
Mongoose查询返回空数组问题解决
核心问题原因
空返回是因为Mongoose默认的集合名自动转换规则:调用conn.model('User',userSchema)时,Mongoose会自动将传入的模型名转为小写复数users,作为实际查询的集合名。你MongoDB中已有的集合名为User,二者名称不匹配,所以查询不到数据。
还有两个潜在问题可能导致后续异常:
- 每次调用
User()方法都会新建数据库连接,没有复用,长期运行会触发连接数溢出 - 文件名大小写不统一:导出文件名为
MongoUtil.js,模型文件中引用的是../mongoutil,Linux/Mac等大小写敏感环境下会加载失败。
修复方案(二选一即可)
方案1:定义Schema时指定集合名
修改models/user.js中的Schema定义,新增collection配置强制绑定集合名:
const userSchema = new Schema({ email: String, userId: Number, password: String, }, { collection: 'User' }); // 新增该行配置
方案2:定义Model时显式传入集合名
调用model方法时第三个参数传入实际集合名:
return conn.model('User', userSchema, 'User')
修改后重新运行代码即可正常查询到已有的集合数据。
可选优化建议
- 统一文件引用大小写:将模型文件中
require('../mongoutil')修改为require('../MongoUtil'),避免跨环境运行报错 - 缓存数据库连接实例,不要每次获取Model都新建连接,减少资源消耗。
内容的提问来源于stack exchange,提问作者user15030493
相关产品推荐
相关产品推荐

