Neo4J-在现有节点上创建关系
我是Neo4J的新手,我希望在现有节点和新节点之间创建新关系 我有一个大学节点和个人节点 我想给现有的大学分配一个新人 我正在尝试以下代码:Neo4J-在现有节点上创建关系,neo4j,cypher,graph-databases,Neo4j,Cypher,Graph Databases,我是Neo4J的新手,我希望在现有节点和新节点之间创建新关系 我有一个大学节点和个人节点 我想给现有的大学分配一个新人 我正在尝试以下代码: MATCH(p:Person{name:'Nick}),(u:University{title:'Exeter})CREATE(p)-[:LIKES]->(u) 所以在上面的代码中:MATCH(p:Person{name:'Nick'})是新用户 而(u:University{title:'Exeter'})是现有的大学 但是它回来了(没有更改,没有行)
MATCH(p:Person{name:'Nick}),(u:University{title:'Exeter})CREATE(p)-[:LIKES]->(u)
所以在上面的代码中:MATCH(p:Person{name:'Nick'})
是新用户
而(u:University{title:'Exeter'})
是现有的大学
但是它回来了(没有更改,没有行)
我甚至尝试过没有匹配部分的查询,但也没有运气
我看过一些类似的答案,但它们似乎也不起作用
任何帮助都将不胜感激。谢谢。按照评论中的建议,在创建新的之前进行匹配
MATCH(u:University {title:'Exeter'})
CREATE(p:Person {name:'Nick'})
CREATE(p)-[w:LIKES]->(u)
return w
这是因为当您匹配时,您会在数据库中搜索一个节点。db说我不能在“节点不存在”的情况下进行realtion 幸运的是,有一种叫做“合并”的东西,它就像一个匹配+创建,当他没有找到他创建的整个路径时。
它应该类似于merge'node1'merge'node2'create(node1)[]->(node2)您还可以使用merge语句,如下所示: MERGE要么匹配现有节点并将其绑定,要么创建新数据并将其绑定。它类似于MATCH和CREATE的组合,另外还允许您指定在匹配或创建数据时会发生什么 您可以执行以下查询:
MERGE (p:Person {name:'Nick'})-[:LIKES]->(u:University {title:'Exeter'})
WITH与此无关,您的查询是正确的,但更相关的是,他应该使用CREATE而不是MATCH来首先创建用户节点,切换您的CREATE和MATCH,而您不需要WITH,总之+1这只在您第一次运行它时起作用。在其他人的后续运行中,它将再次创建大学,因为MERGE将创建整个路径,除非整个路径已经存在。