首页 > 解决方案 > Neo4j:查找连接到多个类型 2 的 A 类型节点的网络

问题描述

我的网络由 A 类型的节点组组成,它们之间有多种关系(不同类型,但不重要 ftm)。其中一些节点也可能与 B 类型的节点有关系。现在我正在寻找与多个 B 类型连接的 A 类型节点组。Neo4j 甚至可能吗?

标签: neo4j

解决方案


示例模型

为了便于可能的进一步答案和解决方案,我记下我的图表创建声明:

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网络。基于此,第三行标识所有连接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"}│
│]                                                                     │
└──────────────────────────────────────────────────────────────────────┘

结果的图形表示


推荐阅读