Neo4j 如果没有';t基于特定属性不存在,否则返回现有节点

Neo4j 如果没有';t基于特定属性不存在,否则返回现有节点,neo4j,cypher,Neo4j,Cypher,我有一个名为User的节点,它有两个属性-id和name。名称和id都是唯一的属性。创建新节点时,id在我的代码中随机生成 我需要的是一个cypherquery,它允许我通过匹配“name”字段来检查特定用户是否存在,如果已经存在,则返回该用户。如果用户不存在,我需要该查询来创建一个具有指定名称的新节点,并生成一个新id以在节点中设置 我尝试使用CREATE UNIQUE,但我知道我没有正确使用它: MATCH(u:User {name: 'John'}) CREATE UNIQUE (u:U

我有一个名为User的节点,它有两个属性-id和name。名称和id都是唯一的属性。创建新节点时,id在我的代码中随机生成

我需要的是一个cypherquery,它允许我通过匹配“name”字段来检查特定用户是否存在,如果已经存在,则返回该用户。如果用户不存在,我需要该查询来创建一个具有指定名称的新节点,并生成一个新id以在节点中设置

我尝试使用CREATE UNIQUE,但我知道我没有正确使用它:

MATCH(u:User {name: 'John'}) 
CREATE UNIQUE (u:User {id: 'rksaxrN--', name: 'John'}) 
RETURN u;
我尝试过的另一种方法是按如下方式使用合并:

MERGE (u:User {name: 'John'}) 
SET u.id = "rksaxrN--";

但是在MERGE的情况下,如果已经找到了用户,SET命令仍然会执行,这意味着我需要指定一个id,即使它是一个现有的节点。现在,因为id实际上是随机生成的,所以我将用一个新id覆盖现有id,我不希望这样。我希望只有在创建新节点时才能设置ID,否则就不能设置。

您很快就可以得到您想要的。只需在CREATE语句中添加

MERGE (u:User {name: 'John'}) 
ON CREATE SET u.id = "rksaxrN--"
RETURN u;