Neo4j - 使用Cypher返回现有路径列表

时间:2017-01-16 08:21:33

标签: neo4j cypher

想象一下,我有以下图表:

graph

忽略图表的关系3-> 2和4-> 3,使其保持树状结构。

注意:在我的情况下,这种类型的关系(4-> 3,3-> 4)将不存在。

是否可以使用Cypher返回图表中所有现有路径的“列表”?

上图的示例:

结果: 1-2,1-3,1-3-4

最好是深度优先

1 个答案:

答案 0 :(得分:0)

这不是Cypher的主要用例,因此效果不佳,但有可能。

示例数据集:

CREATE
  (n1:Node {name: 'n1'}),
  (n2:Node {name: 'n2'}),
  (n3:Node {name: 'n3'}),
  (n4:Node {name: 'n4'}),
  (n1)-[:REL]->(n2),
  (n1)-[:REL]->(n3),
  (n3)-[:REL]->(n4)

查询,使用path variable

MATCH p=(a)-[*]->(b) RETURN p

结果:

╒════════════════════════════════════════════╕
│p                                           │
╞════════════════════════════════════════════╡
│[{name: n1}, {}, {name: n2}]                │
├────────────────────────────────────────────┤
│[{name: n1}, {}, {name: n3}]                │
├────────────────────────────────────────────┤
│[{name: n3}, {}, {name: n4}]                │
├────────────────────────────────────────────┤
│[{name: n1}, {}, {name: n3}, {}, {name: n4}]│
└────────────────────────────────────────────┘

由于Cypher是一种声明性语言,因此没有选项来强制执行广度/深度优先遍历。但是,为此目的,Neo4j提供了一个您可能会觉得有用的traversal framework