我是Neo4j和cypher的新手,想要帮助解决问题。所有的帮助将不胜感激。
这是我的问题:
我创建了两个节点,一个作为用户,一个作为城市,链接到用户。
图表设置
CREATE (n:User{firstName : "John", lastName : "Doe"});
MATCH (user:User{firstName : "John", lastName : "Doe"})
Return user;
查询:
MATCH (user:User)
WHERE user.firstName = "John"
CREATE (city:City { cityName:"Liverpool", areaCode:"34343" })
CREATE (user)-[:STUDY_IN]->(city);
现在我想创建一个新节点(用户)并将该用户链接到现有节点(城市:利物浦)。
我这样做了:
MATCH (city:City)
WHERE city.cityName = "Liverpool"
CREATE (user:User { firstName : "Kent", lastName : "Clark" })
CREATE (user)-[:STUDY_IN]->(city);
在现实生活中,我需要在创建关系之前检查城市是否存在,如果它不存在,那么我想为该城市创建一个新节点。
您可以在此处查看我的代码: http://console.neo4j.org/?id=utor92
答案 0 :(得分:2)
使用MERGE
命令匹配模式(如果存在)或创建模式(如果不存在)。
CREATE (user:User{firstName: "Kent", lastName: "Clark"})
MERGE (city:City{cityName: "Liverpool"})
CREATE (user)-[:STUDY_IN]->(city)
RETURN user, city
您还可以将ON CREATE
和ON MATCH
与MERGE
一起使用。例如:
MERGE (city:City{cityName: "Manchester"})
ON CREATE SET city.foo = "bar"
ON MATCH SET city.baz = "qux"
在此示例中,如果city
不存在,则会创建它,并且属性foo
设置为"bar"
。如果已存在,则属性baz
将设置为"qux"
。
要更深入地了解MERGE
check out the docs。