In my graph, a user is connected to many items and each item can be recursively divided into many sub-items. Since my items have a particular ordering, I'm considering these two options to model my data:
Now I want to create a query to retrieve two levels of items for a given userID. This AQL is my first attempt:
for itemId in (for b in board filter b._from == @_from sort b.order return b._to)
for item1 in (for t in item filter t._id == itemId return keep(t, '_id', 'title'))
return merge(item1, {board: (
for itemId2 in (for b in board filter b._from == item1._id sort b.order return b._to)
for t in item filter t._id == itemId2 return keep(t, '_id', 'title')
)})
The query works and it outputs a result like this:
[
{
"title": "item 1",
"_id": "item/41260117498",
"board": [
{
"title": "item 4",
"_id": "item/42205736442"
},
{
"title": "item 5",
"_id": "item/42208423418"
}
]
},
{
"title": "item 2",
"_id": "item/41260772858",
"board": []
},
{
"title": "item 3",
"_id": "item/41883233786",
"board": []
}
]
Which is fine, but I feel like my query is unnecessarily complex for such a simple traversal. Could someone help me to create a better one, please?