我有这样的关系:
(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
。
答案 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)