сопоставлять узлы на свойстве и включать отношения между этими узлами в результат - PullRequest
0 голосов
/ 21 ноября 2018

У меня есть следующая графовая модель для представления микросервисной архитектуры

(: Team {space}) - [: OPEX] -> (: Service) - [: USES] -> [: Service]

  • Команда принадлежит к пробелу (отделу)
  • Команда имеет право собственности на операцию (= OPEX) для нескольких Сервисов
  • Сервисы имеют отношения USES между ними

Мой запрос на естественном языке:

  • найти все команды в определенном пространстве, и через отношения OPEX найти все их услуги
  • также включить все ИСПОЛЬЗОВАНИЯотношения между этими службами в результате

У меня проблемы с выражением этого запроса в элегантном запросе Cypher.Я придумал следующее, но должен быть более простой и естественный способ выразить это.

MATCH (t1:Team {space:"shopping"})-[o1:OPEX]->(s1:Service),
  (t2:Team {space:"shopping"})-[o2:OPEX]->(s2:Service),
  (s3:Service)-[u:USES]->(s4:Service)
WHERE s3.name=s1.name AND s4.name=s2.name
RETURN  t1, o1, s1, u, s2, o2, t2

Может ли кто-нибудь указать мне лучшее направление?

1 Ответ

0 голосов
/ 21 ноября 2018

Вы должны повторно использовать переменные, которые ссылаются на один и тот же экземпляр, и вы можете использовать IN и COLLECT, чтобы найти шаблоны в наборе узлов.

Что-то вроде этого

MATCH (:Team {space:"shopping"})-[:OPEX]->(s:Service)
WITH COLLECT(s) as services
MATCH (t:Team {space:"shopping"})-[o:OPEX]->(s1:Service)
OPTIONAL MATCH (s1:Service)-[u:USES]->(s2:Service)
WHERE s1 in services AND s2 in services
RETURN t, o, s1, u, s2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...