难以理解返回路径中的关系方向。
我有这样的图表
(:START)-[:NEXT]->(:NODE)-[:NEXT]->(:NODE)...
现在,我正在匹配从起始节点开始的所有路径,方向为:NEXT
,最长为10。查询看起来像
MATCH t=((:START)-[:NEXT*..10]->(:NODE))
RETURN t;
我的输出路径看似混合了:NEXT
方向,如
(:START)-[:NEXT]->(:NODE)<-[:NEXT]-(:NODE)-[:NEXT]->(:NODE)<-...
我无法理解交替方向的来源。
修改 图表只是一条直线(有一个方向)。没有周期,没有分支。请使用以下内容复制shell中的方案:
CREATE (s:START);
MATCH (s:START) MERGE (s)-[:NEXT]->(a:NODE)-[:NEXT]->(b:NODE)-[:NEXT]->(c:NODE)-[:NEXT]->(d:NODE);
MATCH t=((:START)-[:NEXT*..10]->()) return t;
+------------------------------------------------------------------------------+
| t |
+------------------------------------------------------------------------------+
| (:START)-[:NEXT]->(:NODE) |
| (:START)-[:NEXT]->(:NODE)<-[:NEXT]-(:NODE) |
| (:START)-[:NEXT]->(:NODE)<-[:NEXT]-(:NODE)-[:NEXT]->(:NODE) |
| (:START)-[:NEXT]->(:NODE)<-[:NEXT]-(:NODE)-[:NEXT]->(:NODE)<-[:NEXT]-(:NODE) |
+------------------------------------------------------------------------------+
在返回的路径中看到箭头如何在方向上交替?这让我感到困惑。
答案 0 :(得分:2)
来自原始问题的修改:
编辑:图表只是一条直线(有一个方向)。没有 循环,没有分支。请复制shell中的场景 以下内容:
执行cypher-shell
中的语句确实会发生问题。在我看来是一个错误。我在cypher-shell的Github中搜索了这个问题并没有发现任何东西。所以我打开了issue。
编辑2:
The issue我在Github上打开了这个commit。这个修补程序可能会在下一个版本中发布。
编辑3
问题已在this commit中关闭并修复。
原始答案如下:
我在这里模拟你的场景。看:
样本数据集:
CREATE (node1:Node {id:1})
CREATE (node2:Node {id:2})
CREATE (node3:Node {id:3})
CREATE (node4:Node {id:4})
CREATE (node1)-[:NEXT]->(node2)
CREATE (node2)-[:NEXT]->(node3)
CREATE (node3)-[:NEXT]->(node4)
CREATE (node4)-[:NEXT]->(node2)
查询:
MATCH t=((:Node {id:1})-[:NEXT*..10]->(:Node {id:4}))
RETURN t;
结果:
如您所见(并且如问题中所述),返回(:Node {id:4})-[:NEXT]->(:Node {id:2})
。然而,这是因为选项&#34;连接结果节点&#34;在Neo4j浏览器中启用。您可以在Neo4j浏览器设置中禁用它。看:
禁用&#34;连接结果节点&#34;并再次运行查询:
注意选项&#34;连接结果节点&#34;仅适用于结果的图形可视化。也就是说:(:Node {id:4})
和(:Node {id:2})
之间的关系确实存在于结果中,如果您将可视化更改为&#34;表&#34;,&#34;文本&#34;或&#34;代码&#34;。