2017-04-24 75 views
1

我是新来neo4j和cypher,我需要创建图的所有边的相反,但我需要的对立边具有相同类型的原始边缘
用于说明的(a)-[:sometype]->(b)相反会(b)-[:sometype]->(a)
我知道,这是很容易的通过只是挖掘这一命令 match (a)-[]->(b) create (b)-[]->(a)
创建所有边缘的对面,但正如我已经说过,我需要创建的边缘有相同类型的原边 谢谢neo4j创建相反的边

+3

有你为什么需要这个什么特别的原因? Neo4j可以在任何方向上遍历关系。如果你真的需要这个,你是否可以安装[APOC程序](https://neo4j-contrib.github.io/neo4j-apoc-procedures/),如果你没有安装它?它有一些动态的关系创建程序,可以提供帮助。 – InverseFalcon

+3

强调@ InverseFalcon的要点之一:除非你的用例有一个很好的理由*有相同的关系类型在两个方向进行,你不想这样做 - 因为同样的关系可以被轻松地遍历在两个方向上,这是数据库存储的浪费,可以让你的查询变得更慢更复杂。 – cybersam

回答

2

根据this comment在neo4j的Github中的一个未解决的问题,这是不可能的。

正如InverseFalcon在本评论中所说的那样,您可以使用APOC Procedures来实现此目标,如Mark Needham博客的this post中所述。

拳头,安装Apoc程序。在此之后,例如:

CREATE (a)-[:sometype]->(b) 

//Match... 
MATCH (a)-[r]->(b) 
WITH r, a, b 
// and use apoc.create.relationship to achieve your goal... 
CALL apoc.create.relationship(b, TYPE(r), {}, a) YIELD rel 
RETURN rel 

这里测试:enter image description here