当前位置: 首页 > 知识库问答 >
问题:

如何进行GraphQL更新突变?

宋英杰
2023-03-14

我是GraphQL的新手。我已经有了一个添加数据的模式和变异,但是我有点纠结于如何进行更新变异来更新数据库中的现有数据。

我想我知道我可能需要做些什么来实现这一点,但我会感谢一些关于我的想法是否是正确的方法的指示。

这是我的模式,其中包含我的突变GraphQLObject。

const graphql = require("graphql");
const _ = require("lodash");
const Student = require("../models/students");
const Class = require("../models/classes");
const classes = require("../models/classes");

const {
  GraphQLObjectType,
  GraphQLString,
  GraphQLSchema,
  GraphQLID,
  GraphQLInt,
  GraphQLList,
  GraphQLNonNull,
} = graphql;

const Mutation = new GraphQLObjectType({
  name: "Mutation",
  fields: {
    addStudent: {
      type: StudentType,
      args: {
        name: { type: new GraphQLNonNull(GraphQLString) },
        age: { type: new GraphQLNonNull(GraphQLString) },
        test1: { type: new GraphQLNonNull(GraphQLString) },
        classId: { type: new GraphQLNonNull(GraphQLID) },
      },
      resolve(parent, args) {
        let student = new Student({
          name: args.name,
          age: args.age,
          test1: args.test1,
          classId: args.classId,
        });
        console.log(student);
        return student.save();
      },
    },
    addClass: {
      type: ClassType,
      args: {
        name: { type: new GraphQLNonNull(GraphQLString) },
        year: { type: new GraphQLNonNull(GraphQLString) },
      },
      resolve(parent, args) {
        let newclass = new Class({
          name: args.name,
          year: args.year,
        });
        return newclass.save();
      },
    },
    editStudent: {
      type: StudentType,
      args: {
        id: { type: new GraphQLNonNull(GraphQLID)},
        name: { type: GraphQLString },
        age: { type: GraphQLString },
        test1: { type: GraphQLString },
        classId: { type: GraphQLID },
      },
      resolve(parent, args) {
        //logic that finds the relevant data object by id, then updates that object//
        }
      }
    }
  },
});

module.exports = new GraphQLSchema({
  query: RootQuery,
  mutation: Mutation,
});

我是否正确地说,在解析函数中,我需要首先通过id在数据库中找到相关对象,然后返回任何arg已更新/更改的args?我不知道如何在MongoDB上通过id查找对象。

任何建议都将非常感谢。

共有1个答案

孙德宇
2023-03-14

找到了我要找的东西。

editStudent: {
      type: StudentType,
      args: {
        id: { type: new GraphQLNonNull(GraphQLID)},
        name: { type: GraphQLString },
        age: { type: GraphQLString },
        test1: { type: GraphQLString },
        classId: { type: GraphQLID },
      },
      resolve(parent, args) {
        return Student.findOneAndUpdate({_id: args.id}, { test1: args.test1, name: args.name}, { new: true})
      }
 类似资料:
  • 问题内容: 我试图: 根据搜索条件查找文档, 如果找到,请更新一些属性 如果没有插入带有某些属性的文档。 我正在使用,因为我也在执行单个插入操作。我想在一次操作中完成所有操作。 但是,它什么都不会导致为更新/向上插入操作插入任何内容。 这是插入文档: 这是最新资料: 这就是我试图更新/更新的方式: 为什么不更新/更新呢? 注意 那是使用水线ORM的JS代码,它也使用mongodb本机驱动程序。 问

  • 所以我不知道这是否真的描述了我的问题,但这是我能得到的最接近的吗? 我正在使用AWSAppsyncClient进行一些GraphQL突变。由于模型的性质,在更大程度上,由于我缺乏经验,我需要创建一个记录,然后创建两个依赖于第一个的记录,然后才能将它们链接到数据库中。 目前,我正在进行第一次变异,它返回所创建记录的ID。然后在查询返回的promise中创建中间记录。它基本上看起来像: 问题是Prom

  • 我想用Django更新一个表-类似这样的原始SQL: 我的第一个结果是这样的——但这很恶心,不是吗? 有没有更优雅的方式?

  • 问题内容: 我正在使用Cloud Firestore,并且有一系列文档。对于集合中的每个文档,我想更新一个字段。 使用事务执行更新将效率低下,因为在更新数据时不需要读取任何数据。 批处理更新似乎是正确的方向,但是文档中没有包含一次更新多个文档的示例。参见此处:批量写入 问题答案: 如果您使用过Firebase数据库,则不可能原子地完全写入单个单独的位置,这就是为什么您必须使用批量写入的原因,这意味

  • 我已经成功地使用突变创建了数据,但当我更新该数据时,我收到了这个错误 变量“输入”已强制非Null类型“Int! 下面是我的查询模式 这是更新查询 下面是调用API的代码。 在中,我将更新查询发送到我放置数据的位置

  • 问题内容: 如何更新子查询中也存在的表?我必须分两个阶段进行吗?(创建一个临时表-将选定的数据放入其中,然后更新最终表) 我正在尝试使用每个CTN的网络标签更新invoiceLine表。 最终结果将是: invoiceLine 我有以下表格: invoiceLine ctn network 1234 null 2345 null 3456 null terminal ctn network 123