删除Neo4j中的多个冗余节点

时间:2014-08-07 20:54:59

标签: neo4j

我有一个XML文件,我希望在Neo4j中可视化(作为具有互连节点的图形)。 XML文件具有以下层次结构:

<Organism>
 <Enzyme>
  <Motif>

我成功创建了整个图表。当我完成后,我意识到很多时候不同的organisms有一个共同的enzyme或两个不同的enzymes有共同的motifs。现在,我的图表中存在大量冗余,多次出现类似的enzymesmotifs。是否有更简单的方法可以删除除1个节点之外的所有enzyme or motif),然后将其连接到不同的节点?或者我必须从头开始?

我的CREATE语句如下所示:

CREATE (jejunistrain81176:Organism { name: "Campylobacter jejuni strain 81-176" })
CREATE (jejunistrain81176_e1:Enzyme { name: "CjeFIII" })
CREATE (jejunistrain81176_m1:Motif { name: "GCAAGG" })
CREATE UNIQUE (jejunistrain81176)-[:HAS_ENZYME]->(jejunistrain81176_e1)
CREATE UNIQUE (jejunistrain81176_e1)-[:HAS_MOTIF]->(jejunistrain81176_m1)

我尝试用CREATE替换所有MERGE,但它给了我以下错误:

Invalid input '(': expected whitespace, comment, '=', node labels, MapLiteral, a parameter, a relationship pattern, ON, LOAD CSV, START, MATCH, UNWIND, MERGE, CREATE, SET, DELETE, REMOVE, FOREACH, WITH, RETURN, UNION, ';' or end of input (line 21, column 14)

1 个答案:

答案 0 :(得分:0)

使用merge替换create和create unique应该可以正常工作。

您必须为:标签(名称)对创建索引或约束。

我认为您更快地重新导入数据,如果您想要删除和重新连接节点,您需要知道您正在查看哪些关系。

类似的东西:

MATCH (e:Enzyme)
WITH e.name as name, count(*) as cnt, collect(e) as enzymes
where cnt > 1
WITH enzymes[0] as first, enzymes[1..] as remove
UNWIND remove as enzyme
MATCH (enzyme)<-[rel:HAS_ENZYME]-(organism)
MERGE (first)<-[newRel:HAS_ENZYME]-(organism) ON CREATE SET newRel = rel
DELETE rel
WITH distinct first, enzyme
MATCH (enzyme)-[rel:HAS_MOTIV]->(motiv)
MERGE (first)-[newRel:HAS_MOTIV]->(motiv) ON CREATE SET newRel = rel
DELETE rel
DELETE enzyme;