需要Neo4j CREATE UNIQUE澄清

时间:2015-02-25 19:42:29

标签: neo4j

我是Neo4j新手,试图找出我对CREATE UNIQUE缺少的东西。

假设我通过执行以下命令创建了一个节点:

CREATE (:Thing { name : 'X'})    

稍后,我想创建一个新的:Thing节点名称'Y',并创建与现有'X'节点的'KNOWS'关系。 我面临的问题是执行这个命令:

CREATE (y:Thing { name : 'Y'})
CREATE UNIQUE (y)-[:KNOWS ]->(:Thing { name : 'X'})

创建一个名为'X'的新节点,这不是我的意思...... 为什么'CREATE UNIQUE'命令不使用现有的'X'节点?

有没有办法在不执行另一个MATCH的情况下完成我想要做的事情来找到现有的'X'节点?

1 个答案:

答案 0 :(得分:0)

最常见的方法是MATCH。你需要这样做:

CREATE (y:Thing { name : 'Y'})
WITH y
MATCH (x:Thing { name : 'X'})
CREATE UNIQUE (y)-[:KNOWS ]->(x)

或更简单

MATCH (x:Thing { name : 'X'})
CREATE UNIQUE (y:Thing { name : 'Y'})-[:KNOWS ]->(x)

如果您只是必须在没有MATCH的情况下执行此操作,请使用MERGE。我不会这样做,如果不确定(1)标签名称X的东西不存在,(2)你可以创建它。

MERGE要么(1)创建它,如果它还没有,或者(2)如果是,则什么也不做。正如文档所说" MERGE ensures that a pattern exists in the graph":

CREATE (x:Thing { name : 'X'})

然后

MERGE (x:Thing { name : 'X'})
CREATE UNIQUE (y:Thing {name : 'Y'})-[:KNOWS]->x