Neo4j-使用密码返回现有路径的列表

Neo4j-使用密码返回现有路径的列表,neo4j,cypher,Neo4j,Cypher,假设我有以下图表: 忽略图的关系3->2和4->3,使其保持树状结构 注意:在我的例子中,这种类型的关系(4->3,3->4)不存在 是否可以使用Cypher返回图形中所有现有路径的“列表”? 上图的示例: 结果:1-2、1-3、1-3-4 最好是深度优先这不是Cypher的主要用例,因此它的性能不会很好,但这是可能的 示例数据集: CREATE (n1:Node {name: 'n1'}), (n2:Node {name: 'n2'}), (n3:Node {name: 'n3'

假设我有以下图表:

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

注意:在我的例子中,这种类型的关系(4->3,3->4)不存在

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

上图的示例:

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


最好是深度优先

这不是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)
使用以下命令执行查询:

结果是:

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

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

谢谢,这非常有效。如果你不介意我问(我注意到你是图形处理的博士生),我能展示哪些图形有一些模式吗?我的意思是,假设我有其他类似于我展示的图,有一些细微的区别,我想找到每个具有给定模式的图(假设它们都有一个根节点,比如1,有一些名称)。例如,如果我的数据库只有上面的图形,我会搜索所有有模式3->4的图形,返回值为1。提前谢谢我不确定我是否完全理解这个问题,但是你可以很容易地搜索具体的模式,例如
MATCH({name:'n3'})->({name:'n4'})RETURN*
并检查是否有任何结果。
╒════════════════════════════════════════════╕
│p                                           │
╞════════════════════════════════════════════╡
│[{name: n1}, {}, {name: n2}]                │
├────────────────────────────────────────────┤
│[{name: n1}, {}, {name: n3}]                │
├────────────────────────────────────────────┤
│[{name: n3}, {}, {name: n4}]                │
├────────────────────────────────────────────┤
│[{name: n1}, {}, {name: n3}, {}, {name: n4}]│
└────────────────────────────────────────────┘