跟踪 Neo4j 中的变化 - 在标准编程中实现类似于 "flag" 变量的功能

Keep track of Changes in Neo4j - Achieve functionality like a "flag" variable in standard programming

提供了示例数据库的初始设置link to console

有多种情况,在每种情况下,都有表演者(具有属性 ID 和名称)。这是定义问题的延续 problem statement and solution to unique node creation

第二个 link 中的解决方案是(致谢 Christophe Willemsen )

MATCH (n:Performer) 
WITH collect(DISTINCT (n.name)) AS names 
UNWIND names as name 
MERGE (nn:NewUniqueNode {name:name}) 
WITH names 
MATCH (c:Case)
MATCH (p1)-[r:RELATES_TO]->(p2)<-[:RELATES]-(c)-[:RELATES]->(p1)
WITH r
ORDER BY r.length
MATCH (nn1:NewUniqueNode {name:startNode(r).name}) 
MATCH (nn2:NewUniqueNode {name:endNode(r).name}) 
MERGE (nn1)-[rf:FINAL_RESULT]->(nn2)
SET rf.strength = CASE WHEN rf.strength IS NULL THEN r.value ELSE rf.strength + r.value END

此解决方案实现了要求。

但我需要实现这样的目标。

foreach (Case.id in the database)
     {
      foreach(distinct value of r.Length)
         {
         //update value property of node normal
         normal.value=normal.value+0.5^(r.Length-2)

         //create new nodes and add the result as their relationship or merge it to existing one
         MATCH (nn1:NewUniqueNode {name:startNode(r).name}) 
         MATCH (nn2:NewUniqueNode {name:endNode(r).name}) 
         MERGE (nn1)-[rf:FINAL_RESULT]->(nn2)

         //
         rf.strength=rf.strength + r.value*0.5^(r.Length-2);
         }
     }

问题是跟踪 caser.Length 属性的变化。在Cypher中如何实现?

我不会重做最后一部分,设置优势。

不过有一件事,在您的控制台中 link,只有一个 Normal 节点,那么为什么您需要遍历每个案例,您可以匹配不同的关系长度。

顺便说一下第一部分:

MATCH (n:Case)
MATCH (n)-[:RELATES]->()-[r:RELATES_TO]->()<-[:RELATES]-(n)
WITH collect(DISTINCT (r.length)) AS lengths
MATCH (normal:Normal)
UNWIND lengths AS l
SET normal.value = normal.value +(0.5^l)
RETURN normal.value

解释:

  • 匹配大小写

  • 对于每个案例,匹配该案例的执行者的 RELATES_TO 关系

  • 收集不同的长度

  • 匹配Normal节点,迭代不同长度集合并在normal节点上设置合适的值