为何Node.js中执行MongoDB查询得到的examenes值为undefined
问题原因及排查方向
- 最常见的原因是Mongoose Schema中未声明
examenes字段,或者字段名拼写、大小写与数据库实际存储的不一致。Mongoose默认会自动过滤Schema中没有定义的字段,即使MongoDB数据库中实际存储了该字段,查询返回的文档对象中也不会包含该字段,访问时自然返回undefined。可以先打印完整的查询返回结果,确认examenes是否存在于返回对象中,再核对Schema的字段定义。 - 查询时配置了字段过滤规则,主动排除了
examenes字段。比如使用select语法时明确写了-examenes,或者只指定了其他需要返回的字段,没有将examenes加入返回字段列表,核对查询语句的参数即可排查。 - 调用的查询方法返回值类型不匹配。
find()方法默认返回符合条件的文档数组,直接对数组访问examenes属性必然返回undefined,如果你只需要查询单个用户,建议改用findOne()方法,或者先取数组中的对应元素再访问字段。 - 字段存储层级不匹配。
examenes字段实际存储在文档的嵌套子对象中,比如实际路径是user.profile.examenes,直接访问顶层的examenes会找不到,可以打印完整文档结构确认字段的实际嵌套层级。 - 字段类型定义不匹配。比如Schema中定义
examenes为Number类型,但数据库中实际存储的是字符串或者数组,Mongoose做类型转换失败后会将该字段置为undefined,核对Schema字段类型和数据库实际存储的值类型即可排查。
内容的提问来源于stack exchange,提问作者Juan Felipe Jaramillo Losada
相关产品推荐
相关产品推荐

