Neo4j Cypher:复制关系和删除节点

时间:2014-02-07 18:16:02

标签: neo4j cypher

我试图在删除(n)之前将节点(m)的所有内向关系复制到另一个节点(n)(我都知道ID),但我不能拿出代码。 关系可能存在也可能不存在。

任何人的片段?

2 个答案:

答案 0 :(得分:2)

您无法从关系集合中动态创建关系类型。

假设我们收集所有传入的关系,如下所示

START n=node(id1) MATCH n<-[r]-() WITH collect(r) as rels ...

您可以遍历集合rels,但不会能够在下面执行

CREATE (n)-[rels[i]]->(m)

假设所有传入的关系都是相同的类型,请说'foo'。然后你可以做到以下几点。

START n=node(id1),m=node(id2) 
MATCH n<-[r:foo]-(p) 
WITH collect(p) as endNodes,m
FOREACH(i in range(0,length(endNodes)-1) | foreach(a in [endNodes[i]] | 
 create m<-[:foo]-a 
))

如果您的relationshipTypes不同,那么您可以参考此变通方法技术:here。您可以从控制台查询,将所有startnode,endnode,relationshiptype info作为csv下载到excel表中。然后运行cypher脚本从中运行。

其他方式是你可以使用java api查询neo4j,然后存储所有关系和节点,相应地构建你的查询并再次激活。

答案 1 :(得分:0)

假设所有传入的关系都是相同的类型,请说'foo'。然后你可以做更短的查询:

START n=node(id1),m=node(id2) 
MATCH n<-[r:foo]-(p) 
WITH collect(p) as endNodes,m
FOREACH(mm in endNodes | CREATE m-[:foo]->mm)

这避免了双重预告