2017-05-27 334 views
-3

我有2个属性名称为A和B的节点。每个节点都有多个手机联系人保存。Neo4j如何建立关系

  • 用户A在他接触用户C
  • 用户B有用户C在他接触

    contacts

如何用户C有关系,他KNOWS用户连接A和B?

我必须合并用户C的第一件事,而不是建立一个名为KNOWS的关系。

回答

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 
0

您还可以使用MERGE创建C和不晓关系中的一个步骤:

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

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

如果您还有其他的属性来设置你的节点C,你可以使用上创建子条款,同时设置这些属性:

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