Mongoose find函数查询无法返回文档完整字段的问题求助
为什么Mongoose查询结果中没有review、rating和score字段?
原因分析
问题出在你的fruitSchema定义和Mongoose的默认行为上:
- 你只在
fruitSchema里声明了name: String这一个字段,完全没有定义rating、review、score这些你在文档中添加的字段。 - Mongoose是基于Schema的ODM(对象文档映射),默认开启严格模式(
strict: true)。在这个模式下,任何不在Schema中定义的字段,都会被Mongoose自动过滤:保存文档时不会存入数据库,查询时也不会返回这些未定义的字段。 - 你代码里创建
Fruit实例时虽然加了rating、review、score,但因为Schema没这些字段,Mongoose直接忽略了它们,最终数据库里的文档只保留了name字段,所以查询结果里自然看不到这些字段。
解决方案
1. 完善Schema定义(推荐)
修改fruitSchema,把需要存储和查询的字段都补充进去:
const fruitSchema = new mongoose.Schema({ name: String, rating: Number, // 添加rating字段 review: String, // 添加review字段 score: Number // 添加score字段 });
注意:之前已经存入数据库的旧文档,因为存储时Schema没有这些字段,所以这些文档本身不包含
rating、review、score数据,修改Schema后查询旧文档时,这些字段会显示为undefined或不出现;新保存的文档会正常存储和返回这些字段。
2. 关闭严格模式(不推荐)
如果确实需要允许Schema外的字段,可以在创建Schema时关闭严格模式,但这会失去Schema的校验和约束能力,不建议在生产环境使用:
const fruitSchema = new mongoose.Schema({ name: String }, { strict: false });
内容的提问来源于stack exchange,提问作者Aria0325
相关产品推荐
相关产品推荐

