Mongoose调用findOne无法获取集合子文档除_id外其余属性问题
解决步骤
- 核对访问路径
你当前返回的用户数据根节点本身就存在address字段,值为Parcelle Assainies,而structure对象中未包含address属性,先确认是否写错了访问路径,把item.address误写为item.structure.address。 - 核对IStructure定义
你提供的代码中仅声明了IUser、ISubscription接口,未给出IStructure的定义:- 检查IStructure接口中是否声明了
address等需要访问的字段,TS接口未声明的字段访问时会返回null/undefined - 检查对应的Mongoose StructureSchema中是否定义了对应字段,Mongoose会默认过滤Schema中未声明的字段,哪怕数据库中实际存储也无法正常获取
- 检查IStructure接口中是否声明了
- 检查关联查询配置
如果你的structure是关联的独立集合而非内嵌子文档:- 查询时需要增加populate配置才能拉取关联集合的完整字段,将查询语句修改为
user.findOne({_id: id}).populate('structure')即可 - 若已经添加了populate,检查是否手动限制了返回字段,比如写为
populate('structure', '_id'),删除多余的字段限制即可
- 查询时需要增加populate配置才能拉取关联集合的完整字段,将查询语句修改为
- 检查数据库实际存储
直接连接MongoDB查询对应structure._id的文档,确认数据库中是否实际存储了address等字段,若数据库本身未存储对应值,访问自然返回null - 检查序列化规则
若你在接口返回前做了序列化处理,检查是否有全局或字段级的过滤规则,将structure的非_id字段过滤掉了,比如class-transformer的@Exclude注解、返回前手动删除字段的逻辑等。
内容的提问来源于stack exchange,提问作者khazim
相关产品推荐
相关产品推荐

