如何使用neo4j创建现有两个节点之间的关系。

时间:2015-12-09 02:30:31

标签: python neo4j py2neo

我正在使用python3.5和py2neo启动neo4j和我。

我用以下代码构建了两个图形节点。并成功创造。[!

>>> u1 = Node("Person",name='Tom',id=1)
>>> u2 = Node('Person', name='Jerry', id=2)
>>> graph.create(u1,u2)

enter image description here

之后,我会在汤姆和汤姆之间建立关系。和杰瑞' Tom的id属性为1,Jerry的id属性为2。

因此。我想,我必须指向使用id属性的现有两个节点。 然后我尝试创建如下的关系。

>>> u1 = Node("Person",id=1)
>>> u2 = Node("Person",id=2)
>>> u1_knows_u2=Relationship(u1, 'KKNOWS', u2)
>>> graph.create(u1_knows_u2)

以上成功执行。但这个图表很奇怪。

enter image description here

我不知道为什么会创建未知的图节点。以及为什么在未知的两个节点之间建立关系。

3 个答案:

答案 0 :(得分:4)

您可以拥有两个具有相同标签和相同属性的节点。使用u1 = Node("Person",id=1)获得的第二个节点与之前创建的节点不同。它是具有相同标签/属性的新节点。

当您定义两个节点(即您的新u1u2)并在它们之间创建关系时,将创建整个模式。

要获取两个节点并在它们之间创建关系,您可以这样做:

# create Tom and Jerry as before
u1 = Node("Person",name='Tom',id=1)
u2 = Node('Person', name='Jerry', id=2)
graph.create(u1,u2)

# either use u1 and u2 directly
u1_knows_u2 = Relationship(u1, 'KKNOWS', u2)
graph.create(u1_knows_u2)

# or find existing nodes and create a relationship between them
existing_u1 = graph.find_one('Person', property_key='id', property_value=1)
existing_u2 = graph.find_one('Person', property_key='id', property_value=2)

existing_u1_knows_u2 = Relationship(existing_u1, 'KKNOWS', existing_u2)
graph.create(existing_u1_knows_u2)

find_one()假设您的id属性是唯一的。

答案 1 :(得分:2)

另请注意,您可以将Cypher查询语言与Py2neo一起使用:

MERGE

Cypher中的Person语句类似于" get或create"。如果tom节点具有给定名称" Tom"已存在它将绑定到变量tom,否则将创建节点然后绑定到for (var i in foo) { console.log(foo[i][0].user); } 。这与添加uniqueness constraints相结合,可以避免不必要的重复节点。

答案 2 :(得分:2)

检查此查询,

MATCH (a),(b) WHERE id(a) =1 and id(b) = 2 create (a)-[r:KKNOWS]->(b) RETURN a, b