Neo4j 给定关系的属性,如何返回路径和节点属性?

Neo4j 给定关系的属性,如何返回路径和节点属性?,neo4j,cypher,Neo4j,Cypher,我是neo4j新手,正在尝试将最长路径映射到已知节点。在本例中,只有一条直线路径。例如,node1=>node2=>node3=>node4=>node5=>node6。我如何编写该查询 一个复杂的问题是只限制与某一财产的关系。例如,所有关系都是type:KNOWS,但其上有一个signal属性,我只想对关系r:KNOWS运行查询,其中r.signal=10 下面是获取路径中最后两个节点的方法: MATCH (end)<-[r:knows]-(node) WHERE r.signal =

我是neo4j新手,正在尝试将最长路径映射到已知节点。在本例中,只有一条直线路径。例如,node1=>node2=>node3=>node4=>node5=>node6。我如何编写该查询

一个复杂的问题是只限制与某一财产的关系。例如,所有关系都是type:KNOWS,但其上有一个signal属性,我只想对关系r:KNOWS运行查询,其中r.signal=10

下面是获取路径中最后两个节点的方法:

MATCH (end)<-[r:knows]-(node)
WHERE r.signal = 10
AND end.name = 4
RETURN node.name, end.name, r.signal
下面是我的下一次尝试,使用*获取所有长度,并结合使用筛选器和提取来处理集合:

MATCH (end)<-[r:knows*]-(node)
WHERE end.name = 4
WITH end, node, [x IN r WHERE x.signal = 10 | x.signal] as signals
RETURN node.name, end.name, signals

但它仍然不太正确,因为它返回所有迭代,并且只返回对。我希望找到最长的路径,并返回所有节点名称的数组,而不是一次返回一对。任何关于如何实现这一点的指点都非常感谢,或者提供到教程的有用链接。我已经完成了neo4j在线培训

以下是获得最大长度/最长路径的方法:

MATCH p=(end {name: 4})<-[r:knows*]-(node)
WITH max(length(p)) as longestPathLength
MATCH p2=(end {name: 4})<-[r:knows*]-(node)
WITH [x IN nodes(p2) | x.signal] as signals, 
     p2 as p2, 
     longestPathLength as longestPathLength
WHERE length(p2) = longestPathLength
RETURN p2, signals;
首先,需要匹配路径并将其分配给变量,这里是p和p2。您可以按原样使用collection函数跨nodesp2提取节点名称。最后,要找到最长的路径长度,只需找到所有路径,然后选择长度最大的路径。然后返回并仅从恰好具有该长度的路径中提取节点名称

这可能不是最有效的方法,但看起来很有效