使用MongoDB时通过Mongoose执行find查询得到空数组如何解决
Mongoose查询employee集合返回空数组问题排查与修复
问题原因
- Mongoose默认会对传入
model的第一个参数做复数化处理,作为实际查询的集合名:代码中传入employee,默认会查询employees集合,若你的实际集合名为employee就会匹配不到数据。 - 数据库连接操作为异步逻辑,代码未等待连接成功就直接执行
find查询,可能出现连接未建立完成就执行查询、或者查询未完成就提前断开连接的时序问题。 - Schema存在重复定义
empId字段的错误,存在潜在解析异常风险。
修复方案
- 显式指定查询的集合名,关闭自动复数化逻辑:可在定义Schema时添加
collection配置,也可在调用mongoose.model时传入第三个参数作为实际集合名。 - 将查询逻辑放到数据库连接成功的回调中,保证异步时序正确。
- 移除Schema中重复的字段定义。
修正后代码
var mongoose = require("mongoose") // 移除重复字段,显式指定集合名 var mongooseSchema = new mongoose.Schema({ empId: Number, empName: String }, { collection: "employee" }); var Model = mongoose.model("employee", mongooseSchema); // 等待连接成功后再执行查询 mongoose.connect("mongodb://localhost/company", function (err) { if (err) { console.log("数据库连接失败:", err); return mongoose.disconnect(); } Model.find(employeeDetails) }); function employeeDetails(error, data) { if (error == null) { console.log(data); } else { console.log(error) } mongoose.disconnect(); }
若执行修正代码后仍然返回空数组,请先确认company数据库下的employee集合中确实存在符合Schema结构的数据。
内容的提问来源于stack exchange,提问作者JANI BHARAT KUMAR CHITTURI
相关产品推荐
相关产品推荐

