Maybe:
{
MyUser(func: uid(0x1) {
uid
user.name
user.public_id
email
~user.city {
city.name
city.public_id
user.city { #In this case you should filter this level, otherwise you may receive thousands of results from that city.
uid
user.name
user.public_id
email
}
}
}
}
Result visually
How I simulated your request.
{
set{
#One City Registration
_:cityYork <city.public_id> "1dd-48" .
_:cityYork <name> "New York" .
#User Registration 1
_:jonah <user.name> "jonah" .
_:jonah <user.public_id> "9a3f141e" .
_:jonah <email> "jonah@jonah.com" .
_:cityYork <user.city> _:jonah . #connected in reverse with NY
#User Registration 2
_:Brolin <user.name> "Josh Brolin" .
_:Brolin <user.public_id> "7a3b541v" .
_:Brolin <email> "Josh@Brolin.com" .
_:cityYork <user.city> _:Brolin . #connected in reverse
#User Registration 3
_:zoe <user.name> "Zoë Saldaña" .
_:zoe <user.public_id> "1a4b991g" .
_:zoe <email> "zoe@Saldana.com" .
_:cityYork <user.city> _:zoe . #connected in reverse
}
}
Data:
{
"data": {
"user": [
{
"uid": "0x2713",
"user.name": "jonah",
"user.public_id": "9a3f141e",
"email": "jonah@jonah.com",
"~user.city": [
{
"name": "New York",
"city.public_id": "1dd-48",
"user.city": [
{
"uid": "0x2711",
"user.name": "Zoë Saldaña",
"user.public_id": "1a4b991g",
"email": "zoe@Saldana.com"
},
{
"uid": "0x2713",
"user.name": "jonah",
"user.public_id": "9a3f141e",
"email": "jonah@jonah.com"
},
{
"uid": "0x2714",
"user.name": "Josh Brolin",
"user.public_id": "7a3b541v",
"email": "Josh@Brolin.com"
}
]
}
]
}
]
}
