我想 return 使用 cypher 和 neo4j 的路径的边缘列表 - 怎么做?
I want to return the edge list of a a path using cypher and neo4j - how to do it?
我有一个要查询的 Neo4J 数据库,例如获得 E 和 F 之间的最短路径(但它可以是数据库的任何子图)。
我使用 R 中的 RNeo4J 驱动程序执行此操作。
我想 return 使用 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),但也包括一些不在最短路径上(例如 I 和 C)但与其相邻的节点(E-> C、C->E 和 G->I->F)...
我走在正确的轨道上吗?如何确保在我的第二个 MATCH 语句中只考虑最短路径中的节点?有更好的方法吗?任何帮助将不胜感激。
/詹尼克
这应该得到最短路径中每个关系的开始和结束节点的名称,按路径顺序:
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;
我有一个要查询的 Neo4J 数据库,例如获得 E 和 F 之间的最短路径(但它可以是数据库的任何子图)。 我使用 R 中的 RNeo4J 驱动程序执行此操作。
我想 return 使用 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),但也包括一些不在最短路径上(例如 I 和 C)但与其相邻的节点(E-> C、C->E 和 G->I->F)...
我走在正确的轨道上吗?如何确保在我的第二个 MATCH 语句中只考虑最短路径中的节点?有更好的方法吗?任何帮助将不胜感激。
/詹尼克
这应该得到最短路径中每个关系的开始和结束节点的名称,按路径顺序:
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;