Neo4j 迭代路径中的所有节点并比较相邻节点中的属性,以仅输出符合特定条件的节点

Neo4j 迭代路径中的所有节点并比较相邻节点中的属性,以仅输出符合特定条件的节点,neo4j,cypher,Neo4j,Cypher,假设我有一条路径a(wt=80)->B(wt=100)->C(wt=110)->D(wt=160)->E(wt=170) 我想找出这个路径中的所有节点,它们的差值为wt>=20。在这种情况下,它应该只给我B和D。您可以首先获得每个关系的开始节点和结束节点,然后使用“Where”返回那些结束节点满足差异条件的关系的结束节点,类似这样 Match p = a-[:Rel*]->e Where a.name?='A' With endNode(last(relationships(p))) as

假设我有一条路径a(wt=80)->B(wt=100)->C(wt=110)->D(wt=160)->E(wt=170)
我想找出这个路径中的所有节点,它们的差值为wt>=20。在这种情况下,它应该只给我B和D。

您可以首先获得每个关系的开始节点和结束节点,然后使用“Where”返回那些结束节点满足差异条件的关系的结束节点,类似这样

Match p = a-[:Rel*]->e
Where a.name?='A'
With endNode(last(relationships(p))) as second, startNode(last(relationships(p))) as first
Where second.wt - first.wt >= 20
Return second

我使用以下数据来测试CREATE(A{name:'A',wt:80})CREATE(B{name:'B',wt:100})CREATE(C{name:'C',wt:110})CREATE(D{name:'D',wt:160})CREATE(E{name:'E',wt:170})CREATE(A)-[:Rel>-(B),-(B)-[:Rel]->(C),[:Rel]-(C)-(D),[:Rel]-(D[:Rel]>(E);然后尝试使用下面的start a=node()匹配p=a-[:Rel]>e其中a.name?='a',endNode(last(rels(p))作为第二个,startNode(last(rels(p)))作为第一个,其中second.wt-first.wt>=20返回第二个,但我得到了一个语法错误。