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

MongoDB聚合返回_id但GraphQL映射的id字段为null问题求助

你遇到的问题是$project阶段的字段配置错误,叠加GraphQL的默认字段解析规则导致的:

  1. MongoDB的文档默认主键字段为_id,你的集合中并没有存储名为id的字段,所以你在$project中指定id:1时,聚合返回的结果里只会有name字段,id字段为不存在的undefined值
  2. GraphQL的字段解析默认规则是:如果父对象上已经存在和当前字段名完全一致的属性,会直接返回该属性值,不会触发你写的自定义resolve函数。所以你配置的id字段resolve逻辑完全没有执行,console.log自然不会打印,最终返回给前端的就是null值

解决方法(二选一即可)

方法1:修改$project配置,保留_id字段触发resolve逻辑

把聚合的最后一个$project阶段改成:

{
  $project: {
    _id: 1,
    name: 1,
  },
}

这样聚合返回的结果会携带_id和name字段,GraphQL找不到父对象上的id属性,就会触发你写的resolve函数,把_id转为id返回。如果返回的id是[object Object]格式,在resolve里加个toString即可:

return parentValue._id.toString()

方法2:直接在聚合阶段完成字段映射,不需要额外写resolve

直接在$project阶段把_id赋值给id字段,一步到位:

{
  $project: {
    _id: 0, // 不需要返回_id的话可以设为0隐藏
    id: "$_id",
    name: 1,
  },
}

这种方案返回的结果里已经存在id字段,GraphQL直接读取返回即可,不需要自定义resolve逻辑。

内容的提问来源于stack exchange,提问作者notElonMusk

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 11:45:03