私は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 で見つけてから、更新/変更された引数の引数を返す必要があると言うのは正しいでしょうか? ただし、MongoDB で ID でオブジェクトを見つける方法がよくわかりません。
任意のポインターは間違いなく高く評価されます。