neo4j - 如何在 neo4j 中添加双向关系属性的值集合?

标签 neo4j graph-databases

我正在 neo4j 中创建 2 个具有如下方向属性的节点:
两名员工都在互相调用,并且他们通过 CALLED 关系相互连接。

MATCH (e1:EMP),(e2:EMP) WHERE e1.NUMBER='200' AND e2.NUMBER='100' MERGE (e1)-[r:CALLED]->(e2) SET r.DURATION = ['233']    

我的结果如下。

enter image description here

当我在反向方向上创建关系时:

MATCH (e1:EMP),(e2:EMP) WHERE e1.NUMBER='100' AND e2.NUMBER='200' MERGE (e1)-[r:CALLED]->(e2) SET r.DURATION = "235" +r.DURATION[0..]  

我的结果显示出一些奇怪的东西

enter image description here

如何在集合中添加两个属性,使其看起来像

enter image description here

最佳答案

只有在查询时才存在双向的概念。在建立关系时,每个关系都必须有一个方向。您有两种不同关系,每个方向都有一种关系。 从 emp 200 到 100 的关系有一个称为持续时间的属性,其值为 ['233']。

接下来,当你创建一个从 emp 100 到 200 的相反方向的关系时,这个关系是一个新的关系,除了参与的节点相同之外,它与之前的关系没有任何关系。 在此查询中

MATCH (e1:EMP),(e2:EMP) 
WHERE e1.NUMBER='100' AND e2.NUMBER='200' 
MERGE (e1)-[r:CALLED]->(e2) SET r.DURATION = "235" +r.DURATION[0..]  

r.DURATION 为 null,因为从 e1(100) 到 e2(200) 的关系 r 上尚不存在 DURATION 属性。

如果您想在特定方向上向关系添加持续时间,您可以使用类似的内容

MATCH (e1:EMP),(e2:EMP) 
WHERE e1.number='100' AND e2.number='200' MERGE (e1)-[r:CALLED]->(e2) 
SET r.DURATION =["335"]+coalesce(r.DURATION,[])

请注意,这会将新的持续时间值插入到 emp 100 到 200 之间关系的数组中。emp 200 到 100 之间的值未读取且未修改。如果您希望以相反的方向附加关系中的值,则必须首先匹配它才能获取 DURATION 属性。这样做意味着关系在两个方向上具有相同的属性值,然后我会质疑为什么您需要两个关系而不是一个。

如果方向不重要,则使用 e1 和 e2 之间的单一关系。

关于neo4j - 如何在 neo4j 中添加双向关系属性的值集合?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29912073/

相关文章:

java - Cypher 循环结果

database-design - 一个图形数据库中有多个 'databases'

language-agnostic - 将图形数据表示为键值对象

java - Neo4j:节点和关系对象中的属性

java - 如何使用 Neo4j Ha 集群配置 Spring?

docker - neo4j docker服务未启动

java - Web应用程序与neo4j服务器通信的方式是什么

java - Neo4j:关于使用共享节点对图进行建模但具有基于某些属性的唯一路径的方法的建议

java - 从 Titan 图数据库中选择随机顶点的最佳方法是什么

database - 图数据库设计方法