How to upsert using GraphQL?

Hi, I could successfully use DQL upsert feature with GraphQL attributes including linked attributes.
Drawback is the need of handling inverse edges manually.

upsert {
  query {
    q(func: eq(User.username, "john.doe")) {
      v as uid
    }
    
    q2(func: eq(Department.number, "1")) {
      dp as uid
    }
  }

  mutation {
    set {
      uid(v) <User.username> "john.doe" .
      uid(v) <User.email> "user@company1.io" .
      uid(v) <User.department> uid(dp) .
      uid(dp) <Department.members> uid(v) .
      uid(v) <dgraph.type> "User" .
    }
  }
}

After that a GraphQL query provides the information of linked attributes: User.department and Department.members (inverse edge).

query {
  queryUser(){
    username
    department {
      number
    }
  }
  
  queryDepartment(){
    number 
    members { 
      username
    }
  }
}

Result:

{
  "data": {
    "queryUser": [
      {
        "username": "john.doe",
        "department": {
          "number": "1"
        }
      }
    ],
    "queryDepartment": [
      {
        "number": "1",
        "members": [
          {
            "username": "john.doe"
          }
        ]
      }
    ]
  }
}
1 Like