Neo4j创建所需的唯一澄清

Neo4j创建所需的唯一澄清,neo4j,Neo4j,我是一个Neo4j新手,试图找出我在CreateUnique上遗漏了什么 假设我通过执行以下命令创建了一个节点: CREATE (:Thing { name : 'X'}) 稍后,我想创建一个新的:Thing节点名称“Y”,并创建一个与现有“X”节点的“KNOWS”关系。 我面临的问题是执行此命令: CREATE (y:Thing { name : 'Y'}) CREATE UNIQUE (y)-[:KNOWS ]->(:Thing { name : 'X'}) 创建一个名为“

我是一个Neo4j新手,试图找出我在CreateUnique上遗漏了什么

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

CREATE (:Thing { name : 'X'})    
稍后,我想创建一个新的:Thing节点名称“Y”,并创建一个与现有“X”节点的“KNOWS”关系。 我面临的问题是执行此命令:

CREATE (y:Thing { name : 'Y'})
CREATE UNIQUE (y)-[:KNOWS ]->(:Thing { name : 'X'})
创建一个名为“X”的新节点,这不是我的意思。。。 为什么“CREATE UNIQUE”命令不使用现有的“X”节点


有没有一种方法可以在不执行另一个匹配来查找现有的“X”节点的情况下完成我要做的事情?

最常用的方法是进行匹配。您需要执行以下操作:

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)
如果您必须在不匹配的情况下执行此操作,请使用“合并”。我只会这样做,如果你不确定(1)标签和名称X的东西不存在,(2)你可以创建它

MERGE将(1)创建它(如果它不存在),或者(2)如果它存在,则不执行任何操作。正如医生所说的那样:

然后

谢谢我(错误地)认为CREATE UNIQUE会尝试执行CREATE命令,对图形进行尽可能少的更改,因此我认为它会重用现有的“X”节点。
CREATE (x:Thing { name : 'X'})
MERGE (x:Thing { name : 'X'})
CREATE UNIQUE (y:Thing {name : 'Y'})-[:KNOWS]->x