Если в ArangoDB есть вершины (например, «Звезда», «Фильм») и ребра (например, «star_in», «Режиссер», ...), как запросить фильмы, в которых кто-то снялся и снялся? - PullRequest
0 голосов
/ 08 мая 2018

Если в ArangoDB есть вершины (например, «Звезда», «Фильм») и ребра (например, «star_in», режиссер, продюсер), и я хочу получить фильмы, в которых главную роль играет Стивен Чоу, как написать оператор запроса?

1 Ответ

0 голосов
/ 08 мая 2018

В этом случае вы можете использовать функцию AQL NEIGHBORS:

FOR n IN ANY @startId @@edgeCollection OPTIONS {bfs:true,uniqueVertices: 'global'}
RETURN n._id

ANY/INBOUND/OUTBOUND определяет направление ребер, в то время как @startId - ваша начальная вершина (в данном случае Стивен Кроу), а @@ edgecollection - используемая коллекция ребер.

Когда должны быть применены два условия (звездное и направленное), можно использовать ПЕРЕКЛЮЧЕНИЕ двух запросов NEIGHBOR.

Следующий запрос AQL является черновиком для вашего варианта использования:

FOR x IN INTERSECTION
  ((FOR y IN ANY 'star/StephenChow' star_in OPTIONS {bfs: true, uniqueVertices: 'global'} RETURN y._id),
  (FOR y IN ANY 'star/StephenChow' director OPTIONS {bfs: true, uniqueVertices: 'global'} RETURN y._id))
  RETURN x

Рабочий пример с актером / фильмом можно найти в разделе Cookbook документации.

...