Okay, I did a sample so we can work this out.
I did three kinds of entities. As you mentioned Reddit. It is fair enough to add “Thread”.
type Author {
author_name
}
type Comment {
content
author
authored # I'm not sure what authored means in that context
comments
}
type Thread {
author
comments
content
}
author_name: string .
content: string .
author: uid .
comments: [uid] .
The Dataset (Sample)
{
"set": [
{
"author": {
"uid": "_:Maria"
},
"content": "Sed non tempor nisi, lobortis rhoncus mi. In cursus nibh a tellus congue, non blandit nunc rhoncus. Suspendisse sit amet mi ac dui convallis commodo sed feugiat velit. Nam luctus vel velit eget commodo. Etiam laoreet vestibulum elementum. Maecenas sodales magna turpis, vitae rhoncus sapien bibendum ac. Nunc lobortis lectus arcu, nec tristique metus aliquam vel.",
"comments": [
{
"content": "Cras varius ac eros sit amet posuere. Etiam eget ultricies elit. Morbi iaculis nisl et risus elementum tincidunt. Nunc ornare metus a velit pretium ultrices. Cras consequat, libero eu suscipit scelerisque, metus eros semper ligula, vitae sagittis purus libero sit amet erat. ",
"author": {
"uid": "_:Lucas"
},
"authored": "x",
"comments": {
"content": "Sed non tempor nisi, lobortis rhoncus mi. In cursus nibh a tellus congue https://www.lipsum.com/feed/html",
"author": {
"uid": "_:anonymous"
},
"authored": "x",
"dgraph.type": "Comment"
},
"dgraph.type": "Comment"
},
{
"content": "Ut turpis nulla, ultrices at arcu vel, egestas aliquet ante. Nulla velit nisl, iaculis ac aliquam facilisis, molestie sit amet tellus. Morbi ornare ultrices accumsan. Pellentesque vel eros eu lacus eleifend vestibulum.",
"author": {
"uid": "_:anonymous"
},
"authored": "x",
"dgraph.type": "Comment"
}
],
"dgraph.type": "Thread"
},
{
"author": {
"uid": "_:Maria"
},
"content": "Morbi eget ante dictum, consequat purus non, ullamcorper diam. Aenean dapibus odio elit, eget vulputate nulla aliquam ac. Etiam egestas sit amet ipsum pharetra pharetra. ",
"comments": [
{
"content": "Vestibulum sit amet eleifend erat",
"author": {
"uid": "_:Julius"
},
"authored": "x",
"comments": {
"content": "Morbi tempor velit erat, quis egestas ipsum maximus facilisis.",
"author": {
"uid": "_:anonymous"
},
"authored": "x",
"dgraph.type": "Comment"
},
"dgraph.type": "Comment"
},
{
"content": "Nullam quis sollicitudin ligula. Fusce id commodo libero.",
"author": {
"uid": "_:Lucas"
},
"authored": "x",
"comments": {
"content": "Morbi tempor velit erat, quis egestas ipsum maximus facilisis.",
"author": {
"uid": "_:anonymous"
},
"authored": "x",
"dgraph.type": "Comment"
},
"dgraph.type": "Comment"
}
]
},
{
"uid": "_:Maria",
"author_name": "Maria",
"dgraph.type": "Author"
},
{
"uid": "_:Julius",
"author_name": "Julius",
"dgraph.type": "Author"
},
{
"uid": "_:Lucas",
"author_name": "Lucas",
"dgraph.type": "Author"
},
{
"uid": "_:anonymous",
"author_name": "anonymous",
"dgraph.type": "Author"
}
]
}
Querying
This query is just an example, as I have only one Thread I did not use functions. Just the Type.
{
get_one_Thread(func: type(Thread)) @recurse {
author
uid
author_name
content
comments
}
}
Result
As you can see in the result, using recurse I was able to expand Thread and its comments normally.
{
"data": {
"get_one_Thread": [
{
"author": {
"uid": "0xc0e28",
"author_name": "Maria"
},
"uid": "0xc0e27",
"content": "Sed non tempor nisi, lobortis rhoncus mi. In cursus nibh a tellus congue, non blandit nunc rhoncus. Suspendisse sit amet mi ac dui convallis commodo sed feugiat velit. Nam luctus vel velit eget commodo. Etiam laoreet vestibulum elementum. Maecenas sodales magna turpis, vitae rhoncus sapien bibendum ac. Nunc lobortis lectus arcu, nec tristique metus aliquam vel.",
"comments": [
{
"author": {
"uid": "0xc0e2e",
"author_name": "Lucas"
},
"uid": "0xc0e2d",
"content": "Cras varius ac eros sit amet posuere. Etiam eget ultricies elit. Morbi iaculis nisl et risus elementum tincidunt. Nunc ornare metus a velit pretium ultrices. Cras consequat, libero eu suscipit scelerisque, metus eros semper ligula, vitae sagittis purus libero sit amet erat. ",
"comments": [
{
"author": {
"uid": "0xc0e26",
"author_name": "anonymous"
},
"uid": "0xc0e2f",
"content": "Sed non tempor nisi, lobortis rhoncus mi. In cursus nibh a tellus congue https://www.lipsum.com/feed/html"
}
]
},
{
"author": {
"uid": "0xc0e26",
"author_name": "anonymous"
},
"uid": "0xc0e30",
"content": "Ut turpis nulla, ultrices at arcu vel, egestas aliquet ante. Nulla velit nisl, iaculis ac aliquam facilisis, molestie sit amet tellus. Morbi ornare ultrices accumsan. Pellentesque vel eros eu lacus eleifend vestibulum."
}
]
}
]
}
}
If you can suggest changes to my Sample to fit your context. Please do it. The more aligned we are, the better.