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"
}
]
}
]
}
}