У нас есть графическая модель (не данные), как на картинке ниже:
Фактический график, в котором хранятся данные, имеет только одну 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