如何在NEO4J中投影路径进行拓扑排序?

问题描述 投票:0回答:1

我正在使用 neo4j 数据库制作一个包管理器,其中包作为节点和 DEPENDS_ON 关系。例如,要构建包

A
,我首先需要构建包
B
C
。为此,我需要进行拓扑排序,但不知道如何使用
gds.graph.project()
来投影路径。

这是我如何获取需要投影的路径:

MATCH path = (n:Package{name: 'neofetch'})-[r:DEPENDS_ON*]->(l:Leaf)

我使用以下方法将上述路径投影到 GDS 图表:

RETURN gds.graph.project("g", n, l, {})

然后进行拓扑排序:

CALL gds.dag.topologicalSort.stream("g", {computeMaxDistanceFromSource: true})
YIELD nodeId, maxDistanceFromSource
RETURN gds.util.asNode(nodeId).name AS name, maxDistanceFromSource
ORDER BY maxDistanceFromSource, name

排序结果只有第一个节点和最后一个节点,没有中间节点出现。

neo4j cypher neo4j-gds
1个回答
0
投票

您需要传递路径中每对相邻的节点,而不仅仅是第一个和最后一个节点。这应该对你有用:

MATCH (:Package{name: 'neofetch'})-[rels:DEPENDS_ON*]->(:Leaf)
UNWIND rels AS r
WITH DISTINCT r
RETURN gds.graph.project("g", STARTNODE(r), ENDNODE(r))
© www.soinside.com 2019 - 2024. All rights reserved.