Typegoose 8.2搭配Mongoose6调用findOne无法返回adverts数组字段如何解决
问题修复方案
你可以按以下顺序排查修复:
- 第一步:确认数据库中存在对应字段
先直接通过Mongo Shell查询对应chatId的文档,确认文档中实际存储了adverts字段。如果数据库本身没有该字段,说明是数据写入逻辑的问题,和查询逻辑无关。 - 第二步:显式指定查询投影
Typegoose 8.x与Mongoose 6组合使用时,偶发子数组字段默认select: true不生效的问题,你可以在查询时手动指定返回adverts字段:
如果加上投影后可以正常返回字段,说明是默认选择配置未生效,可以直接用该方案临时解决,也可以升级return await TelegramModel .findOne(filter, { adverts: 1 }, options) .exec();@typegoose/typegoose到8.x的最新小版本修复该bug。 - 第三步:补全数组字段默认值
你当前定义的adverts是可选字段,无默认值,当字段无数据时序列化会自动剔除该字段,可以给字段添加空数组默认值:@prop({ type: () => [AdvertSubscriptionEntity], _id: false, select: true, default: () => [] // 新增默认值配置 }) public adverts?: AdvertSubscriptionEntity[]; - 第四步:排查查询参数的投影配置
检查你传入findOne的options参数中是否存在select配置,排除手动排除adverts字段的情况。
内容的提问来源于stack exchange,提问作者Evgeny Vdovin
相关产品推荐
相关产品推荐

