MongoDB findOne返回结果可正常打印但role属性为undefined是什么原因?
可能原因列表
- Schema未定义对应字段:
findOne默认返回Mongoose Document实例而非普通JS对象,若role字段没有在accountModel对应的Schema中声明,Mongoose不会将该字段挂载到Document实例的直接可访问属性上。打印整个Document实例时会展示底层存储的全部原始数据,因此能看到role字段存在,但直接访问findAccount.role就会返回undefined。_id是Mongoose Schema默认自带的字段,所以可以正常访问。
快速验证方案:调用console.log(findAccount.toObject().role),如果能正常输出即可确认是该问题,也可以在查询时添加lean参数直接返回普通对象:await this.accountModel.findOne({_id: ObjectId(param.accountId)}).lean() - 字段名拼写/大小写不匹配:实际数据库中存储的字段名和你访问的
role存在拼写、大小写差异,比如实际存储的是Role、user_role等,打印完整对象时你没有留意到差异,直接访问就返回undefined。 - Schema字段配置了
select: false:如果role字段在Schema定义时设置了select: false,默认查询不会返回该字段,若你后续通过其他方式手动把字段塞进了返回的文档对象中,也可能出现打印可见但直接访问不到的情况。 - 属性访问路径错误:如果
role属于嵌套文档的子属性,比如实际结构是findAccount.userInfo.role,直接访问顶层的role自然会返回undefined。
内容的提问来源于stack exchange,提问作者fatiu
相关产品推荐
相关产品推荐

