You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 17:27:03