Как сделать объединение и пересечение графов в ArangoDB AQL - PullRequest
0 голосов
/ 10 мая 2019

У нас есть графическая модель (не данные), как на картинке ниже:

enter image description here

Фактический график, в котором хранятся данные, имеет только одну vertex collectionи edge collection

Как выполнить запрос на объединение (или) и пересечение (и) для нескольких путей в вершине:

countries -> cities -> users -> like songs 
                             -> read books

запрос на объединение на пользовательских вершинах:

return all paths that each user has at least one path on any branch

usa -> chicago -> john -> book-1 (accepted)
usa -> chicago -> john -> song-1 (accepted)

germany -> cologne -> john -> book-1 (accepted)

запрос на пересечение в пользовательских вершинах:

return all paths that each user has at least one path on each branch

usa -> chicago -> john -> book-1 (accepted)
usa -> chicago -> john -> song-1 (accepted)

germany -> cologne -> john -> book-1 (not accepted)

Для пересечения нам нужны сложные пересечения, где у нас есть иерархия пересечений, где каждое пересечение в вершине будет работать на результате другого пересечения наеще одна вершина пути.

Об объединении Я пришел с этим запросом, это правильный способ объединения в AQL:

for vertex in Vertex
for v,e,p in 1..3 any vertex._id graph 'DataGraph'
OPTIONS {bfs: true, uniqueVertices: 'global'}
FILTER

(
p.edges[0].edgeCollectionCode == 'locatedin'
and p.edges[1].edgeCollectionCode == 'livein'
and p.edges[2].edgeCollectionCode == 'read'
and length(p.edges)==3
)
||
(
p.edges[0].edgeCollectionCode == 'locatedin'
and p.edges[1].edgeCollectionCode == 'livein'
and p.edges[2].edgeCollectionCode == 'like'
and length(p.edges)==3
)

return p
...