我想使用 cypher 和 neo4j 返回路径的边缘列表 - 该怎么做?

I want to return the edge list of a a path using cypher and neo4j - how to do it?

提问人:Jannik Vindelov 提问时间:5/1/2017 最后编辑:Rahul SharmaJannik Vindelov 更新时间:5/1/2017 访问量:465

问:

我有一个 Neo4J 数据库,例如我查询它以获取 E 和 F 之间的最短路径(但它可以是数据库的任何子图)。 我使用 R 中的 RNeo4J 驱动程序执行此操作。

我想使用 Cypher 将路径作为边缘列表返回给 R,以便我可以直接使用边缘列表创建 Igraph 对象并绘制或分析它。

我是Cypher的新手,但一直在使用浏览器在下面的查询行中尝试一些东西:

"MATCH p = shortestpath((n)-[*..5]->(m))
WHERE n.nodename = 'E' AND m.nodename = 'F'
WITH p 
MATCH (f)-->(t) 
WHERE f IN nodes(p) AND t IN nodes(p) 
RETURN DISTINCT f.nodename, t.nodename"

这将生成一个边列表,其中包含最短路径(例如 E->G->F),但也包括一些不在最短路径上但与其相邻的节点(例如 E->C、C->E 和 G->I->F)...

我走在正确的轨道上吗?如何确保在第二个 MATCH 语句中仅考虑最短路径中的节点?有没有更好的方法?任何帮助将不胜感激。

/扬尼克

密码器 R-NEO4J

评论


答:

2赞 cybersam 5/1/2017 #1

这应该按路径顺序获取最短路径中每个关系的开始和结束节点的名称:

MATCH shortestpath((n)-[rels*..5]->(m))
WHERE n.nodename = 'E' AND m.nodename = 'F'
UNWIND rels AS rel
RETURN STARTNODE(rel).nodename AS s, ENDNODE(rel).nodename AS e;

评论

0赞 Jannik Vindelov 5/1/2017
谢谢,这正是我需要的!
0赞 Btibert3 10/3/2023
我觉得很多方法都使这比需要的更难。上面突出显示了通过路径的开始/结束节点的密码语言的优雅。