Neo4j如何建立关系

时间:2017-05-27 22:25:10

标签: neo4j cypher

我有两个属性名称为A和B的节点。每个节点都保存了多个电话联系人。

  • 用户A在其联系人中有用户C
  • 用户B在其联系人中有用户C

    contacts

如何将用户C与他KNOWS用户A和B的关系连接起来?

首先我必须合并用户C,而不是创建一个名为KNOWS的关系。

2 个答案:

答案 0 :(得分:0)

  

如何将用户C与他知道用户A和B的关系连接?

简单地说:

MATCH(a {name:"A"}) // Match nodes with property name = "A" and store it in a variable
MATCH(b {name:"B"}) // Match nodes with property name = "B" and store it in b variable
MERGE (c {name:"C"}) // merge c (will be created if a node with name = "C does not exists yet")
CREATE UNIQUE (c)-[:KNOWS]->(a) // Will create :KNOWS relationship from c to a if it not exists
CREATE UNIQUE (c)-[:KNOWS]->(b) // Will create :KNOWS relationship from c to b if it not exists

答案 1 :(得分:0)

您还可以使用MERGE一步创建C和KNOWS关系:

MATCH (a:user {name:'A'}) MERGE (c:user {name:'C'})-[:KNOWS]->(a);

在这里,您正在寻找一个:user 节点,其属性为 name =' A'。如果找到,则将结果传递给MERGE子句。您正在为MERGE提供完整的路径; MERGE将创建不存在的路径部分。在这种情况下,它将创建一个类型为:user 的节点,并为其提供 name 属性设置为' C&#39 ;;它还将创建一个:从C到A的KNOWS关系.MERGE将使用已经给出的现有节点 a 。通过这种方式,MERGE与CREATE不同,因为CREATE会尝试创建所有内容,包括新节点a。

如果您在节点C上设置了其他属性,则可以使用ON CREATE子句同时设置这些属性:

MATCH (a:user {name:'A'}) MERGE (c:user {name:'C'})-[:KNOWS]->(a) ON CREATE SET c={name:'C', phone:'+1 234 5678'};