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

时间:2015-04-28 06:40:37

标签: 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

当我在revrese方向创建关系时:

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

1 个答案:

答案 0 :(得分:4)

双向概念仅在查询时存在。在创建关系时,每个关系都必须有一个方向。你有两个不同的关系,每个方向一个。 从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为空,因为从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之间使用单一关系。