2013-04-11 96 views
2

我的问题与此主题非常接近:Cypher query: Finding all paths between two nodes filtered by relationship properties但我想要做的是找到沿路径具有递增的关系属性值的路径。因此,在这种previos主题例如溶液路径(从A到d)将是:Cypher查询:通过关系属性查找路径

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) 

但暗号,如果它是更多钞票。

回答

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; 

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

+1

嗨。谢谢你的答案。但是这对我不起作用。这个实际匹配**(A) - 50 - >(B) - 70 - >(C) - 60 - >(D)**但我只需要匹配**(A) - 50→(B)→60→(C)→70→(D)** – cernej 2013-04-11 20:36:07

+0

理论上可以添加具有这种属性的特殊节点。但在我的情况下,它会导致极大和复杂的图(现在我的图有100k +的节点,我认为这种变化会导致100百万以上的节点) – cernej 2013-04-12 09:26:37

+0

如果节点属性可用于增量属性路径查找te,您可以添加到你的现有节点的关系属性值就像这个'foreach(r in relationship(p): FOREACH(x in nodes(p):SET x.value = r.value))''。 – SotirisTsartsaris 2013-04-13 10:32:01

相关问题