将节点添加到关系的中间

时间:2014-10-22 16:23:11

标签: neo4j

我有这样的关系:

(a:Groups)<-[:IS_MEMBER_OF_GROUP]-(p:Person)

我想在其中添加一个节点,以便它可以像

一样
(a:Groups)<-[:IS_SUBGROUP]-(s:Subgroup)<-[:IS_MEMBER_OF_GROUP]-(p:Person)

我试过这段代码:

MATCH (a:Groups) WITH COLLECT(a) AS ds
FOREACH (d1 IN ds | MATCH (d1)<-[:IS_MEMBER_OF_GROUP]-(p:Person)
CREATE (d1)<-[:IS_SUBGROUP]-(s:Subgroup)<-[:IS_MEMBER_OF_GROUP]-(p)) 

但我无法在MATCH内使用FOREACH

1 个答案:

答案 0 :(得分:2)

如果您尝试为现有关系的所有实例创建关系,则可以使用:

MATCH (a:Groups)<-[:IS_MEMBER_OF]-(p:Person)
CREATE (a)<-[:IS_SUBGROUP]-(s:Subgroup)<-[:IS_MEMBER_OF_GROUP]-(p))

如果你想删除现有的关系,你可以稍微修改一下:

MATCH (a:Groups)<-[existing:IS_MEMBER_OF]-(p:Person)
CREATE (a)<-[:IS_SUBGROUP]-(s:Subgroup)<-[:IS_MEMBER_OF_GROUP]-(p)
DELETE existing

评论非常有意义,为每个组创建一个子组:

MATCH (a:Groups)
CREATE (a)<-[:IS_SUBGROUP]-(s:Subgroup)
WITH a, s
MATCH (a)<-[:IS_MEMBER_OF]-(p:Person)
CREATE (s)<-[:IS_MEMBER_OF_GROUP]-(p)

或者,如果您只想创建成员所在的子组:

MATCH (a:Groups)<-[:IS_MEMBER_OF]-(p:Person)
CREATE (a)<-[:IS_SUBGROUP]-(s:Subgroup)
WITH a, s, p
CREATE (s)<-[:IS_MEMBER_OF_GROUP]-(p)