使用突变的 Graphql 删除操作
Graphql Delete operation using mutation
我正在尝试创建删除操作。我有一个用户和任务要做。每个用户都有一个分配的任务列表。这是我的删除操作代码:
const Mutation = new GraphQLObjectType({
name: 'Mutation',
fields: {
deleteUser: {
type: UserType,
args: {
id: { type: new GraphQLNonNull(GraphQLID) }
},
resolve(parent, args){
var id = (args.id).toString()
let todos = Todo.find({ user_id: id });
let user = User.findById(args.id);
todos.remove();
user.findOneAndRemove();
return todos;
}
}
}
})
这是我定义的类型:
const ToDoType = new GraphQLObjectType({
name: 'todoItem',
fields: () => ({
id: {type: GraphQLID},
title: {type: GraphQLString},
completed: {type: GraphQLBoolean},
user: {
type: UserType,
resolve(parent, args){
return User.findById(parent.user_id);
}
}
})
});
const UserType = new GraphQLObjectType({
name: 'user',
fields: () => ({
id: {type: GraphQLID},
name: {type: GraphQLString},
email: {type: GraphQLString},
login: {type: GraphQLString},
todos: {
type: new GraphQLList(ToDoType),
resolve(parent, args){
return Todo.find({ user_id: parent.id })
}
}
})
});
问题是,在删除用户时,我想删除他所有的“待办事项”,但根据我在 return 中输入的内容,我只能删除一件事。所以现在我有“return todos”,它只删除分配给用户的待办事项,而不是用户。当我把“return 用户”放在那里时,它只会删除没有他的任务的用户。如何一次性删除用户和他的任务?
所示代码似乎实际上改变了数据以删除用户及其所有待办事项。我相信您感到困惑的是变异操作具有 User
的“类型”(即它将 return 的类型)。因此,这就是您需要从突变函数 return 得到的。
从概念上讲,从用户及其所有数据来看, return 可能是个好主意,因此如果 API 用户想要捕获其中的部分或全部,他们可以,尽管考虑到隐私问题可能并不理想。另一种方法是让突变 return 成为 success-or-failure 状态。
我正在尝试创建删除操作。我有一个用户和任务要做。每个用户都有一个分配的任务列表。这是我的删除操作代码:
const Mutation = new GraphQLObjectType({
name: 'Mutation',
fields: {
deleteUser: {
type: UserType,
args: {
id: { type: new GraphQLNonNull(GraphQLID) }
},
resolve(parent, args){
var id = (args.id).toString()
let todos = Todo.find({ user_id: id });
let user = User.findById(args.id);
todos.remove();
user.findOneAndRemove();
return todos;
}
}
}
})
这是我定义的类型:
const ToDoType = new GraphQLObjectType({
name: 'todoItem',
fields: () => ({
id: {type: GraphQLID},
title: {type: GraphQLString},
completed: {type: GraphQLBoolean},
user: {
type: UserType,
resolve(parent, args){
return User.findById(parent.user_id);
}
}
})
});
const UserType = new GraphQLObjectType({
name: 'user',
fields: () => ({
id: {type: GraphQLID},
name: {type: GraphQLString},
email: {type: GraphQLString},
login: {type: GraphQLString},
todos: {
type: new GraphQLList(ToDoType),
resolve(parent, args){
return Todo.find({ user_id: parent.id })
}
}
})
});
问题是,在删除用户时,我想删除他所有的“待办事项”,但根据我在 return 中输入的内容,我只能删除一件事。所以现在我有“return todos”,它只删除分配给用户的待办事项,而不是用户。当我把“return 用户”放在那里时,它只会删除没有他的任务的用户。如何一次性删除用户和他的任务?
所示代码似乎实际上改变了数据以删除用户及其所有待办事项。我相信您感到困惑的是变异操作具有 User
的“类型”(即它将 return 的类型)。因此,这就是您需要从突变函数 return 得到的。
从概念上讲,从用户及其所有数据来看, return 可能是个好主意,因此如果 API 用户想要捕获其中的部分或全部,他们可以,尽管考虑到隐私问题可能并不理想。另一种方法是让突变 return 成为 success-or-failure 状态。