3

我的问题非常接近这个主题:Cypher 查询:查找两个节点之间的所有路径,通过关系属性过滤,但我想要做的是找到沿路径具有增加的关系属性值的路径。因此,在之前的主题中,示例解决方案路径(从 A 到 D)将是:

A->DA->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)

不幸的是,这条路也匹配。

有没有办法如何用密码编写这个查询,否则我将不得不使用 gremlin 代替?

感谢您的任何建议。

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

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

但如果可能的话,在密码中。

4

1 回答 1

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;

更新:有没有办法用节点属性来做到这一点?

于 2013-04-11T19:59:47.077 回答