如何在插入前使用graphql进行子查询的upsert或检查结果

如何在插入前使用graphql进行子查询的upsert或检查结果,graphql,Graphql,我需要做一件本质上是一件好事。什么是检查现有用户并进行一种变异与另一种变异的有效方法。在我的情况下,如果用户存在,我需要进行登录,否则我应该在登录之前调用create。我正在使用graph.cool graphql服务。我可以把它作为两个独立的调用来完成,但是有没有一种方法可以用graphql编写,这样就可以在一个调用中完成,而不需要第二次往返?请注意,我无法控制后端,只能使用现有的函数 突变{ //仅当用户不存在时才创建用户 //这里有没有一种在graphql中执行条件语句的方法? crea

我需要做一件本质上是一件好事。什么是检查现有用户并进行一种变异与另一种变异的有效方法。在我的情况下,如果用户存在,我需要进行登录,否则我应该在登录之前调用create。我正在使用graph.cool graphql服务。我可以把它作为两个独立的调用来完成,但是有没有一种方法可以用graphql编写,这样就可以在一个调用中完成,而不需要第二次往返?请注意,我无法控制后端,只能使用现有的函数

突变{
//仅当用户不存在时才创建用户
//这里有没有一种在graphql中执行条件语句的方法?
createUser(authProvider:{auth0:{idToken:}}){
身份证件
}
//始终尝试使用已从auth0获得的令牌登录用户
signinUser(输入:{auth0:{idToken:}}){
身份证件
代币
}
}

我认为您的问题可以归结为“如何根据后端的决定返回令牌或id?”

答案是:

union authResult=id |令牌
突变{
authenticateUser(authProvider:{auth0:{idToken:}}){
authResult
}
}
现在,您已经将“签名还是创建?”的决策深入到后端,您可以在一次旅行中完成它并找出结果


请注意,因为您希望一次完成创建,所以必须一次提供所有必要的信息-即您必须为createUser步骤提供足够的信息,即使后端不执行创建,因为用户已经存在

由于后端不由我控制,我无法在其上创建另一个函数,因此必须使用signinUser、createUser和allUsers,但我无法创建authenticateuser方法。无论哪种情况,我都想要一个代币。。。我将更新问题以反映这一点。据我所知,您的问题的唯一可能答案涉及后端更改。后端控制哪些突变可用。如果它不提供upsert变异来完成您需要的工作,那么您必须对它进行两次调用,以便使用它提供的功能完成您想要的工作。”
mutation {

  // Only create a user if they do not exist already
  // is there a way to do a conditional statement in graphql here?
  createUser(authProvider: { auth0: { idToken: "<idToken>" }}) {
    id
  }

  // always try signing the user in with the token we already got from auth0
  signinUser(input: { auth0: { idToken: "<idToken>" }}) {
    id
    token
  }

}
union authResult = id | token

mutation {
  authenticateUser(authProvider: { auth0: { idToken: "<idToken>" }}) {
    authResult
  }
}