删除突变返回 null

hol*_*ler 1 javascript node.js graphql express-graphql

我有一个待办事项列表,我已经成功地添加了新项目并更新了缓存,现在正在努力添加删除突变。我的最终目标是从删除突变中返回一个 id,该 id 可用于更新客户端的整个待办事项列表。

我尝试将项目的 id 传递给突变,但它返回 null。

图式

type Todo {
  _id: ID!
  todo: String!
}

type RootMutation {
  deleteTodo(_id: ID!): Todo
}
Run Code Online (Sandbox Code Playgroud)

解析器

  deleteTodo: async function({ _id }, req) {
    return await Todo.deleteOne({ _id });
  }
Run Code Online (Sandbox Code Playgroud)

使用以下代码在http://localhost:3000/graphql 的graphql 接口中测试了此突变:

mutation {
  deleteTodo (_id: "example0101010101001010101aasdsadasd"){
        _id
    }
}
Run Code Online (Sandbox Code Playgroud)

出现此错误

{
  "errors": [
    {
      "message": "Cannot return null for non-nullable field Todo._id.",
      "locations": [
        {
          "line": 3,
          "column": 3
        }
      ],
      "path": [
        "deleteTodo",
        "_id"
      ]
    }
  ],
  "data": {
    "deleteTodo": null
  }
}
Run Code Online (Sandbox Code Playgroud)

当我将一个项目的 id 传递给突变时,预计会返回该已删除项目的 id,但我一直得到 null。我怀疑我的解析器功能可能有问题。

链接到 github存储库

Dan*_*den 5

您可能不想使用deleteOne这里的方法。查看、 、的类型定义,并且不返回已删除的文档。请改为使用,这将返回已删除的文档,如果未找到则返回 null。mongooseremovedeleteOnedeleteManyfindByIdAndRemove