想象一下,我有以下图表:
忽略图表的关系3-> 2和4-> 3,使其保持树状结构。
注意:在我的情况下,这种类型的关系(4-> 3,3-> 4)将不存在。
是否可以使用Cypher返回图表中所有现有路径的“列表”?
上图的示例:
结果: 1-2,1-3,1-3-4
最好是深度优先。
答案 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。