Neo4j 密码查询:按关系属性查找路径

Neo4j 密码查询:按关系属性查找路径,neo4j,cypher,Neo4j,Cypher,我的问题与这个主题非常接近:但我想做的是找到一条路径,该路径上的关系属性值不断增加。因此,在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.

我的问题与这个主题非常接近:但我想做的是找到一条路径,该路径上的关系属性值不断增加。因此,在previos主题中,示例解决方案路径(从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)
不幸的是,这条路径也匹配

有没有办法用cypher编写这个查询,否则我将不得不使用gremlin

谢谢你的建议

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

头部(关系(p))为r1,p
FOREACH(尾部的r2(关系(p)):
r1.温度

但在cypher中,如果可能的话。

在我的例子中,这一个有效

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;
启动a=节点(1),d=节点(4)
匹配p=a-[r:激活*。]-d
头(关系(p))为r1,尾(关系(p))为r2,p
其中所有(关系中的r3)(p)
其中r2.温度>r1.温度,而不是r3.温度

更新:是否有任何方法可以使用节点属性进行更新?

您好。谢谢你的回答。但这对我不起作用。这实际上匹配(A)--50-->(B)--70-->(C)--60-->(D),但我只需要匹配(A)--50-->(B)--60-->(C)--70-->(D),理论上可以添加具有此属性的特殊节点。但在我的例子中,这将导致非常大和复杂的图(现在我的图有100k+的节点,我计算出这一变化将导致100M+的节点)如果节点属性可用于增量属性路径查找,则可以向现有节点添加关系的属性值,如下所示
foreach(关系中的r(p):foreach(节点中的x(p):SET x.value=r.value))
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;