Пример модели
Для простоты возможных дальнейших ответов и решений отмечу мое утверждение создания графа:
CREATE
(a1:TypeA {name: 'A1'})-[:REFERS]->(a2:TypeA {name: 'A2'}),
(a1)-[:REFERS]->(a3:TypeA {name: 'A3'}),
(a2)-[:REFERS]->(a4:TypeA {name: 'A4'}),
(a3)-[:REFERS]->(a4),
(c1:TypeC {name: 'C1'})-[:REFERS]->(a1),
(c1)-[:REFERS]->(a2),
(d1:TypeD {name: 'D1'})-[:REFERS]->(a1),
(d1)-[:REFERS]->(a3),
(b1:TypeB {name: 'B1'})-[:REFERS]->(a3),
(b1)-[:REFERS]->(a4),
(b2:TypeB {name: 'B2'})-[:REFERS]->(a4),
(e1:TypeE {name: 'E1'})-[:REFERS]->(a3),
(e1)-[:REFERS]->(b1);
![graphical representation of the example graph](https://i.stack.imgur.com/TUtJt.png)
Решение
Вторая строка определяет вашу TypeA
сеть. На основании этого третья строка идентифицирует все подключенные TypeB
s, которые подсчитываются в строке 5 и фильтруются в строке 6.
MATCH
networkA = (startNode:TypeA)-[:REFERS]-(:TypeA)-[:REFERS]-(:TypeA)-[:REFERS]-(:TypeA)-[:REFERS]-(:TypeA),
(startNode)-[:REFERS]-(nodeB:TypeB)
WITH
nodes( networkA) AS networkANodes, count(nodeB) AS nodeBAmount
WITH networkANodes WHERE nodeBAmount >= 2
RETURN
networkANodes;
Результат
╒══════════════════════════════════════════════════════════════════════╕
│"networkANodes" │
╞══════════════════════════════════════════════════════════════════════╡
│[{"name":"A4"},{"name":"A3"},{"name":"A1"},{"name":"A2"},{"name":"A4"}│
│] │
├──────────────────────────────────────────────────────────────────────┤
│[{"name":"A4"},{"name":"A2"},{"name":"A1"},{"name":"A3"},{"name":"A4"}│
│] │
└──────────────────────────────────────────────────────────────────────┘
![graphical representation of the result](https://i.stack.imgur.com/VxECu.png)