假设我们有一个包含此周期的图表:
{id:1, start:true, end:false} --> {id:2, start:false, end:true}
{id:1, start:true, end:false} <-- {id:2, start:false, end:true}
我想编写一个查询,查找从具有start:true的节点到具有end:true的节点的特定长度的所有路径,如(长度为3):
(n1 {start: true})-[:*3]-(n4 {end: true})
但结果应包括循环路径,如:
{id:1, start:true, end:false} --> {id:2, start:false, end:true} --> {id:1, start:true, end:false} --> {id:2, start:false, end:true}
这在Cypher 2.1中是否可行?
答案 0 :(得分:2)
这个问题的答案是肯定的,您在示例查询中使用的语法是正确的。这是正确的,因为您在查询中留下了任何方向指示符,这意味着将在向前和向后方向上进行遍历。
我不确定的一件事是你是否可以使用start
和end
作为属性名称,如果可以的话,是否应该使用它们,因为它们都在Cypher中起作用。
编辑 - 理解了问题
我认为Cypher不会在遍历中恢复关系,虽然我看不到任何关于此的文档,但它代表了一些奇怪的路径分析结果。我相信你可以使用遍历API编写自己的遍历,可以......
你可以在Cypher中实现你想要的,我的版本不能很好地扩展到更长的路径,我确信有人可以做得比这更好:
MATCH (a:Thing{start:true})-[:REL]-(b:Thing)
WITH DISTINCT a, b
MATCH (b)-[:REL]-(c:Thing)
WITH DISTINCT a, b, c
MATCH (c)-[:REL]-(d:Thing{end:true})
RETURN DISTINCT a, b, c, d