我有一个名为User的节点,它有两个属性--id和name。 name和id都是唯一的属性。在创建新节点时,我的代码会随机生成id。
我需要的是一个cypherquery,它允许我通过匹配'name'字段来检查特定用户是否存在,如果已经存在,则返回该用户。如果用户不存在,我需要该查询来创建具有指定名称的新节点,并生成要在节点中设置的新ID。
我尝试使用CREATE UNIQUE,但我知道我没有以正确的方式使用它:
MATCH(u:User {name: 'John'})
CREATE UNIQUE (u:User {id: 'rksaxrN--', name: 'John'})
RETURN u;
我尝试过的另一种方法是使用MERGE,如下所示:
MERGE (u:User {name: 'John'})
SET u.id = "rksaxrN--";
但是在MERGE情况下,如果已经找到用户,则仍然执行SET命令,这意味着我需要指定一个id,即使它是一个现有节点。现在,因为id实际上是随机生成的,所以我最终会用新的id覆盖现有的id,我不希望这样。我希望能够仅在创建新节点时设置ID,否则无法设置。
答案 0 :(得分:2)
你非常接近得到你想要的东西。您只需将ON CREATE
添加到SET
语句中即可。
MERGE (u:User {name: 'John'})
ON CREATE SET u.id = "rksaxrN--"
RETURN u;