我是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'节点?
答案 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