Mongoose无法从已建立连接返回MongoDB文档的问题
解决Mongoose查询返回空数组(MongoClient可正常查询)的问题
可能的原因及解决方案
1. Schema字段类型与数据库实际数据不匹配
你的Schema中model字段定义为Number类型,但实际MongoDB集合中的model可能是字符串(比如"Model 3"、"2023"这类文本值)。Mongoose在映射文档时,类型不兼容会导致解析异常,最终返回空数组。
解决方法:
修改carSchema中的model字段类型为String(或根据实际数据调整):
const carSchema = new mongoose.Schema({ make: { type: String, required: true }, model: { type: String, required: true }, // 改为String类型匹配实际数据 owner: { type: ownerSchema, required: false }, colour: { type: String, required: false }, registration: { type: String, required: false }, address: { type: String, required: false } }, { collection: 'cars' })
2. 临时关闭Strict模式排查问题
Mongoose默认开启strict: true,会过滤掉Schema未定义的字段,若数据库文档存在Schema外的字段,可能影响文档映射(虽通常不会直接导致空数组,但可作为排查手段)。
解决方法:
在Schema选项中添加strict: false:
const carSchema = new mongoose.Schema({ // ... 原有字段定义 }, { collection: 'cars', strict: false })
若此时能查询到数据,说明存在Schema与文档字段不匹配的情况,需逐一核对字段类型、字段名是否完全一致。
3. 使用findRaw()验证原始数据
调用Mongoose的findRaw()方法获取未经Schema映射的原始文档,判断是否为Schema解析环节的问题:
const cars = await Cars.findRaw(); console.log('原始文档:', cars);
如果findRaw()能返回数据,即可确认是Schema映射导致的异常,针对性调整Schema即可。
4. 确认数据库连接一致性
检查Mongoose连接URL中的数据库名称、主机、端口是否与MongoClient使用的完全一致,避免连接到错误的数据库实例。
内容的提问来源于stack exchange,提问作者Julia
相关产品推荐
相关产品推荐

