neo4j - 跟踪 Neo4j 中的更改 - 在标准编程中实现诸如 "flag"变量之类的功能

标签 neo4j cypher

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

有多种情况,每种情况下都有表演者(具有属性 id 和 name)。这是定义的问题的延续problem statementsolution to unique node creation

第二个链接中的解决方案是( credits to 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中如何实现?

最佳答案

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

有一件事是,在您的控制台链接中,只有一个 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节点上设置适当的值

关于neo4j - 跟踪 Neo4j 中的更改 - 在标准编程中实现诸如 "flag"变量之类的功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27782300/

相关文章:

Java客户端密码查询与RedisGraph redis.clients.jedis.exceptions.JedisDataException : errMsg: Invalid input 'p' : expected PROFILE line: 1

node.js - 显示从 Nodejs 到 EJS 的嵌套 JSON

Neo4j 空间索引删除

spring - 在哪里可以找到 Spring Graph DB 分步教程?

neo4j - Neo4J 能够处理 40Giga 的数据吗?

Neo4j:在 Web 界面中提供密码参数

Neo4j:删除附加到特定节点的节点和关系,直到叶节点

string - 如何将列表(从收集)转换为字符串

database - 如何从关系三元组创建图数据库?

javascript - 查找与 Node 列表有关系的 Node