源和多个目的地之间的最短路径

时间:2021-02-26 13:55:50

标签: graph neo4j cypher

我有一个看起来像这样的 Neo4j 图

enter image description here

它具有使用 CHILD_OF 关系的关系层次结构。
所有绿色节点(见)都是书籍的权利。
父母可以看到的所有书籍也对孩子可见,但反过来不行。
此外,孩子有可能在不涉及父母的情况下直接看书。

这里的问题是找到从孩子到书籍的最短路径。
在这种情况下,C1 有 2 条路径(通过权利)到 Book1,但只有 1 条到 Book2。 Book3 没有。

enter image description here

Neo4j Cypher 查询应仅返回从 C1 到所有书籍的最短路径。

我尝试使用 Neo4j shortestPath 函数,但它不起作用。

MATCH (c:Child {name:'C1'} ),
  (b:Book),
  p = shortestPath((c)-[*]-(b))
RETURN p

此查询的输出返回:

enter image description here

所需的最终图表应如下所示:

enter image description here

1 个答案:

答案 0 :(得分:0)

您需要将关系设为从 Child 到 Book 的方向。这是因为当你输入 * 时,它会包含一个你不需要的从 book3 到 library 的路径。

MATCH (c:Child {name:'C1'} ),
  (b:Book),
  p = shortestPath((c)-[*]->(b))
RETURN p
相关问题