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

如何为连接mLab的GraphQL编写数据更新Mutation

解决GraphQL editMovie Mutation数据未更新的问题

我一眼就看出问题出在你editMovie的resolve函数里——你用错了Mongoose的findOneAndUpdate方法!下面给你拆解问题并给出修复方案:

问题根源

你的findOneAndUpdate调用存在三个关键错误:

  • 查询条件格式错误:第一个参数应该是查询对象(告诉Mongoose要找哪条文档),而不是直接传入id字符串
  • 缺少更新内容:你没有传递要修改的字段和新值,Mongoose根本不知道要更新什么
  • 默认返回旧文档:findOneAndUpdate默认返回更新前的旧数据,所以你看到的还是原来的genre值

修复后的editMovie代码

editMovie: {
  type: MovieType,
  args: {
    id: {type: new GraphQLNonNull(GraphQLString)},
    title: {type: GraphQLString},
    genre: {type: GraphQLString}
  },
  resolve(parent, args) {
    // 分离id和要更新的字段
    const { id, ...updateData } = args;
    return Movie.findOneAndUpdate(
      { _id: id }, // 查询条件:匹配目标文档的_id
      updateData, // 要更新的字段及新值
      { new: true } // 关键选项:返回更新后的新文档
    );
  }
}

代码解释

  1. 解构参数:用{ id, ...updateData }把id从参数中分离出来,剩下的title和genre自动组成更新对象,这样即使只传其中一个字段也能正常更新
  2. 查询条件:{ _id: id }明确告诉Mongoose要找到_id等于传入id的文档
  3. new: true选项:强制Mongoose返回更新后的最新文档,而不是默认的旧文档

现在再在GraphiQL中执行你的editMovie调用,返回的genre就会变成"Crime"了!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:41:32