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

Apollo GraphQL查询Task时非空字段返回null问题求助

问题原因及解决方案

核心错误点

你的getTaskByTitle查询Resolver中使用了TaskModel.find()方法,这个方法返回的是文档数组,但Resolver声明的返回类型是单个Task对象。当GraphQL尝试从数组中读取title字段时,无法获取到对应值,返回null,而title在模型里被标记为非空字段,因此触发Cannot return null for non-nullable field Task.title.错误。

修复步骤

将Resolver中的find替换为findOne,让其返回单个Task对象,与声明的返回类型匹配:

@Query(() => Task, { nullable: true})
async getTaskByTitle(@Arg('title') title: string) {
    // 替换find为findOne
    return await TaskModel.findOne({ title: title }).exec()
}

额外说明

  • 如果业务需要根据title返回多个Task,需将Resolver的返回类型改为[Task],同时调整查询语句结构:
    @Query(() => [Task], { nullable: true})
    async getTasksByTitle(@Arg('title') title: string) {
        return await TaskModel.find({ title: title }).exec()
    }
    
    对应查询语句:
    query GetTasksByTitle($title: String!) {
      getTasksByTitle(title: $title) {
        createdAt
        updatedAt
        title
      }
    }
    
  • 按ID查询正常是因为findById本身返回单个文档,与Resolver声明的返回类型匹配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 20:46:04