示例模型
为了方便可能的进一步答案和解决方案,我记下了我的图表创建声明:
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);
解决方案
第二行检测您的TypeA 网络。基于此,第三行标识所有连接的TypeBs,在第 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"}│
│] │
└──────────────────────────────────────────────────────────────────────┘