虽然在过去我使用了删除单个记录的GraphQL突变,但我想出了这样的想法,即在我想一次删除多条记录的情况下这并不理想,因为它最终通过多次调用删除1条记录的突变(在循环中)这导致通过网络进行多次API调用。
因此,我决定改为修改突变以接受一个参数,即对象或ID(无论什么)的列表,我可以在后端对其进行循环。通过这样做,它只对API进行1次调用,并删除所有记录。
我成功地做到了这一点,我面临的唯一障碍是return语句。我不知道怎么写。
因此,如果我有一个模型(在我的模式中),例如:
class UserType(DjangoObjectType):
class Meta:
model = User
fields = (
'id',
'username',
'password',
'first_name',
'last_name',
'is_active',
'group_ids',
)
full_name = graphene.String()
full_identification = graphene.String()
过去我用过:
class DeleteUser(graphene.Mutation):
username = graphene.String()
class Arguments:
id = graphene.ID()
def mutate(self, info, **kwargs):
user = get_object_or_404(User, id=kwargs['id'])
user.delete()
return user
class Mutation(graphene.ObjectType):
delete_user = DeleteUser.Field()
但现在我想做一些事情,比如:
class DeleteUsers(graphene.Mutation):
users = graphene.List(UserType)
username = graphene.String()
class Arguments:
ids = graphene.List(graphene.ID)
def mutate(self, info, **kwargs):
deleted_users = []
for user in User.objects.filter(id__in=kwargs['ids']):
user.delete()
deleted_users.append(user)
return deleted_users
class Mutation(graphene.ObjectType):
delete_users = DeleteUsers.Field()
您可以在DeleteUser
类的Mutate(...)
方法中看到,我尝试返回deleted_users
以便能够在前端执行类似于:“用户X、Y和Z已被删除”的操作。但是我无法检索用户的数据。我该如何实现它?也许我错过了什么。
目前,我尝试的GraphQL查询是:
mutation {
deleteUsers(
ids: [5,6,7],
) {
users {
username
}
}
}
但它不起作用,说用户是空的。。。不知道如何检索查询中的用户。
提前感谢。
嗯,我终于弄明白了问题所在(似乎谈论一个问题就能解决它,下次我会尝试用塑料鸭子)。
虽然deleted_users
是用户的正确列表,但我的突变的输出类型
没有设置。
因此,解决方案是添加:
class Meta:
output = graphene.List(UserType)
在我的变异中
其结果是:
class DeleteUsers(graphene.Mutation):
class Arguments:
ids = graphene.List(graphene.ID)
class Meta:
output = graphene.List(UserType)
def mutate(self, info, **kwargs):
deleted_users = []
for user in User.objects.filter(id__in=kwargs['ids']):
user.delete()
deleted_users.append(user)
return deleted_users
可通过以下方式调用:
mutation {
deleteUsers(
ids: [5,6,7],
) {
username
firstName
# ...
# And other fields ...
# ...
}
}
在Spring-data-mongob中,我们可以从存储库的查询方法中返回单个已删除的对象吗,如下所示 如果始终存在通过上述查询删除的单个文档。 我试过了,但它抛出了异常,比如不能将Long转换为MyObject。我认为只支持void、long或List或Stream。有什么方法可以实现我想要做的吗?
现在我有了新阵列 现在,现有的_array和新的_array都有名称值“b”,我希望它从新数组中移除
我使用的是Android系统的图形ql阿波罗客户端。我能够使用单个字段的突变传递数据,没有任何问题。在突变中使用输入对象时,出现了无法读取未定义的电子邮件属性的错误。但是在浏览器中运行时,同样的图形ql工作。 Graphql突变 输入 API调用的Java代码
我有以下模式: 模式反映了一个事实,即我必须返回一个对象。然而,我不能总是这样做,有时我需要返回null。例如,如果我向数据库发出请求,它将返回return object或null(如果找不到用户)。 在我的GraphQL模式中,我为特定字段设置了类型。如果我试图返回一个不同于我设置的类型,我会得到一个错误。如何允许字段返回对象或null?
问题内容: 我有一个包含我的对象的数组。每个人都有财产。 有没有比我的数组中找到重复的帖子ID的更有效方法? 问题答案: 我将建议2解决方案。 两种方法都必须是平等的 使帖子符合可哈希和平等 在这里,我假设您的struct(或类)具有type 的属性。 解决方案1(丢失原始订单) 要删除重复的内容,您可以使用 解决方案2(保留订单)
如何从javascript变量中删除对象/数组?