gpt4 book ai didi

graph - 使用 Neo4j Cypher 获取没有第一个或最后一个节点的最长路径

转载 作者:行者123 更新时间:2023-12-01 00:42:30 26 4
gpt4 key购买 nike

我有一个节点和关系的森林。类似于以下内容:

N1-发送->N2-发送->N3-发送->N4

N5-发送->N6-发送->N7-发送->N8

N9-发送->N10-发送->N11-发送->N12-发送->N13

我想编写一个 Cypher 查询,返回 3 个路径,没有第一个或最后一个项目。不在路径开头或结尾的节点已经有一个属性(“中间”,“真”),这样就更容易了。

我遇到的一个问题是 Cypher 返回路径以及路径的每个子集。例如,它返回 n10->n11-> 和 n11->n2,以及 n10->n11->n12, .... 这不是我想要的。

相反,我只希望结果是一个 3 的数组,其中每个我有:

n2->n3

n6->n7

n10->n11->n12

就是这样。

我提出的查询是:(第一个有语法错误):

START n=node(*) MATCH p=()-[*]->i-[*]->() WHERE has(i.middle) 
WITH COLLECT(p) AS pa, MAX(length(p)) AS maxLength, NODES(p) AS pn
FILTER(path IN pa WHERE length(path)=maxLength) AS longestPaths
RETURN DISTINCT FILTER(x IN longestPaths WHERE exists(x.middle))


START n=node(*) MATCH p=()-[*]->i-[*]->() 
WHERE has(i.middle)
RETURN DISTINCT filter(x IN NODES(p) WHERE exists(x.middle)) as O

第二个返回没有第一个和最后一个节点的路径,但它返回重复的节点,因为它也返回路径的子集。

谢谢你。

最佳答案

这可能会做你想做的:

MATCH (n)-[:sends*]->(m)
WHERE NOT ( ()-[:sends]->(n) OR (m)-[:sends]->() )
RETURN NODES(p)[1..-1] AS middleNodes;
WHERE子句消除了子路径(即作为较长路径一部分的路径)。 NODES(p)[1..-1]语法返回每个路径中从倒数第二个节点到倒数第二个节点。

关于graph - 使用 Neo4j Cypher 获取没有第一个或最后一个节点的最长路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36636096/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com