Как вернуть все узлы, которые имеют как минимум X путей по Y прыжкам - PullRequest
0 голосов
/ 16 января 2019

Я новичок в neo4j, так что, возможно, это очень простой вопрос ... Давайте рассмотрим пример с X = 2, Y = 2

DB:

CREATE (a:Node{name:'A'})
CREATE (b:Node{name:'B'})
CREATE (c:Node{name:'C'})

CREATE (c1:Category{name:'c1'})
CREATE (c2:Category{name:'c2'})

CREATE (a)-[:REL]->(c1)<-[:REL]-(b)
CREATE (a)-[:REL]->(c2)<-[:REL]-(b)
CREATE (c)-[:REL]->(c2)

enter image description here

Если начальной точкой является A, запрос должен возвращать следующее, поскольку только B подключен по 2 путям с максимальным количеством прыжков = 2.

enter image description here

Без ограничения пути 2 я мог бы использовать следующее, но это также показало бы узел C:

MATCH (start:Node {name:"A"})-[*1..2]-(res) 
RETURN start, res

1 Ответ

0 голосов
/ 16 января 2019

Таким образом, для этого вам нужно будет использовать count (), чтобы узнать, сколько раз был достигнут конечный узел (количество различных путей к этому узлу), затем выполнить фильтрацию на основе этого числа:

MATCH (start:Node {name:"A"})-[*2]-(res)  // or [*..2] if up to 2 instead of exactly 2
WITH start, res, count(res) as paths
WHERE paths >= $requiredPaths // assumes a `requiredPaths` parameter to the query
RETURN start, res
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...