连接到节点(如果存在)以防止重复和冗余条目

时间:2014-08-06 00:38:55

标签: neo4j cypher

我有一个XML文件,我尝试使用Neo4j进行可视化。它看起来像这样:

<Organism>
 <Name>Bacillus halodurans C-125</Name>
  <Enzyme>M.BhaII</Enzyme>
   <Motif>GGCC</Motif>
  <Enzyme>M1.BhaI</Enzyme>
   <Motif>GCATC</Motif>
  <Enzyme>M2.BhaI</Enzyme>
   <Motif>GCATC</Motif>
</Organism>

我在cypher中的创建查询看起来像这样(下面),它产生了所需的节点和我想要的边缘:

CREATE (halodurans:Organism { name: "Bacillus halodurans C-125" })
CREATE (halodurans_e1:Enzyme { name: "M.BhaII" })
CREATE (halodurans_m1:Motif { name: "GGCC" })
CREATE (halodurans_e2:Enzyme { name: "M1.BhaI" })
CREATE (halodurans_m2:Motif { name: "GCATC" })
CREATE (halodurans_e3:Enzyme { name: "M2.BhaI" })
CREATE UNIQUE (halodurans)-[:HAS_ENZYME]->(halodurans_e1)
CREATE UNIQUE (halodurans)-[:HAS_ENZYME]->(halodurans_e2)
CREATE UNIQUE (halodurans)-[:HAS_ENZYME]->(halodurans_e3)
CREATE UNIQUE (halodurans_e1)-[:HAS_MOTIF]->(halodurans_m1)
CREATE UNIQUE (halodurans_e2)-[:HAS_MOTIF]->(halodurans_m2)
CREATE UNIQUE (halodurans_e3)-[:HAS_MOTIF]->(halodurans_m2)

但是,在某些情况下,具有不同Organism的其他enzyme的{​​{1}}已存在于数据库中。 Id希望motif连接到存在它的enzyme节点,而不是创建新节点。因为我刚开始在neo4j(大约6小时前),我不知道该怎么做。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

只需用MERGE替换CREATE即可。如果没有匹配给定的属性,这将插入节点,如果匹配,则插入节点。

这里是nice quick overview Cypher基础知识。