跟踪 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);
}
}
问题是跟踪 case 和 r.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节点上设置合适的值
提供了示例数据库的初始设置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);
}
}
问题是跟踪 case 和 r.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节点上设置合适的值