Какой правильный код для получения соединительных узлов с ограничениями в neo4j? - PullRequest
0 голосов
/ 30 августа 2018

Я пытаюсь получить соединительные узлы. Последний узел должен иметь тип (r) pobj. Как я могу указать это с кратчайшим путем?

match(c:fdnode{name:'flights'}) 
match(d:fdnode) 
match p = shortestPath((c)-[*..15]-(e)-[r]-(d)) 
where d.name = '700' and type(r) = 'pobj' 
RETURN nodes(p)

Если я удаляю r, код возвращает желаемый результат. Но мне нужен тип (r).

pobj только для этого конкретного случая. У меня несколько критериев обхода.

Ответы [ 2 ]

0 голосов
/ 01 сентября 2018

Разобрался. Это работает.

match (a:iknode)-[*..10]->(b:iknode)-[r]->(c:iknode) where type(r) =  'pobj' and a.name = 'flights' return c

Это также работает:

MATCH p = ((c:fdnode)-[*..4]->(d:fdnode)) 
WHERE c.name = 'flights'  AND TYPE(LAST(RELATIONSHIPS(p))) = 'pobj'
RETURN NODES(p) order by length(p) ;
0 голосов
/ 31 августа 2018

Следующий запрос может сделать то, что вы хотите. Он возвращает узлы в кратчайшем неориентированном пути (длиной до 15), который удовлетворяет следующим критериям:

  • Первый узел имеет метку «fdnode», а его значение name равно «рейсы».
  • Последний узел имеет метку «fdnode», а его значение name равно «700».
  • Последнее отношение имеет тип pobj.

    MATCH p = shortestPath((c:fdnode)-[*..15]-(d:fdnode)) 
    WHERE c.name = 'flights' AND d.name = '700' AND TYPE(LAST(RELATIONSHIPS(p))) = 'pobj'
    RETURN NODES(p);
    

ПРИМЕЧАНИЕ. Совпадающий путь будет «ненаправленным», потому что этот запрос имитировал ваш запрос, не указывая какую-либо направленность в шаблоне MATCH. Таким образом, каждому подобранному отношению разрешается быть в любом направлении. Если это не то, что вы хотели, вам нужно явно указать направление в вашем паттерне.

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