Cypher查询:按关系属性查找路径

时间:2013-04-11 12:08:58

标签: neo4j cypher

我的问题非常接近这个主题:Cypher query: Finding all paths between two nodes filtered by relationship properties但我想要做的是找到路径中具有增加的关系属性值的路径。因此,在previos主题示例中,解决方案路径(从A到D)将是:

A-> D A-> B-> D

我使用了上一个主题的解决方案

START a=node(1), d=node(4) 
MATCH p=a-[r:ACTIVATES*..]->d 
WITH head(relationships(p)) as r1,p
WHERE all(r2 in relationships(p) 
      where r2.temperature > r1.temperature) 
return p;

它适用于此示例。问题是当存在具有多于2个关系的路径时,例如:

    activates:50      activates:70      activates:60
(A)-------------->(B)-------------->(C)-------------->(D)
不幸的是,这条路也很匹配。

是否有办法在cypher中编写此查询,或者我将不得不使用gremlin?

感谢您的任何建议。

更新:我需要的是一些结构(如伪编程语言):

WITH head(relationships(p)) as r1,p
FOREACH(r2 in tail(relationships(p)):
    r1.temperature < r2.temperature, r1 = r2)

但是如果它是可行的那么在密码中。

1 个答案:

答案 0 :(得分:2)

这个在我的例子中起作用

START a=node(1), d=node(4) 
MATCH p=a-[r:ACTIVATES*..]-d 
WITH head(relationships(p))as r1,last(relationships(p))as r2,p
WHERE all(r3 in relationships(p) 
      where r2.temperature > r1.temperature AND NOT r3.temperature < r1.temperature) 
return p;

更新:有节点属性可以做到这一点吗?