В Neo4J, как мне сопоставить подграф, но отфильтровать узлы, которые находятся в другом подграфе - PullRequest
0 голосов
/ 10 апреля 2019

Мой граф является ориентированным ациклическим графом.Я хотел бы запросить подграф данного родительского узла, но затем отфильтровать подграфы, которые имеют отношение к другому родительскому узлу.Я создал изображение для иллюстрации.

Например, я хотел бы выбрать подграф (C)-[r]->(D), но исключить (B)-[r]->(E), потому что это дочерний элемент (A).

Я написалследующий запрос Cypher, который включает в себя вызов apoc.path.subpgrahAll(), отфильтровывает (B), но не отфильтровывает узлы, такие как (E)

MATCH (n {id: 'C'})
CALL apoc.path.subgraphAll(n, {relationshipFilter: 'CONNECTED>'})
YIELD nodes, relationships
UNWIND nodes as node
WITH node
WHERE SIZE(()-[:CONNECTED]->(node)) = 1
RETURN node

enter image description here

1 Ответ

0 голосов
/ 10 апреля 2019

Это может работать для вас:

CALL apoc.path.subgraphAll(n, {relationshipFilter: 'CONNECTED>'}) YIELD nodes, relationships
UNWIND nodes as node
WITH node
WHERE SIZE((node)<-[:CONNECTED]-()) = 1
RETURN node

Между прочим, в шаблонах Cypher необходимо ставить тип отношения перед двоеточием, что было одной из проблем (но не основной) в вашем запросе.

...