检查neo4j数据库中是否存在关系不起作用

时间:2018-02-25 10:19:26

标签: python neo4j py2neo

当我使用事务创建两个节点及其关系时,如下所示,我可以使用graph.match()来检查是否存在关系。

from py2neo import Graph, Node, Relationship, NodeSelector
g = Graph('http://localhost:7474/db/data', user='uname', password='pass')

tx = g.begin()

a = Node("Person", name="Alice")
tx.create(a)

b = Node("Person", name="Bob")
tx.create(b)

ab = Relationship(a, "KNOWS", b)
tx.create(ab)

tx.commit()

relations = g.match(start_node=a, rel_type="KNOWS", end_node=b)
list(relations) // this returns [(alice)-[:KNOWS]->(bob)]

后来我试图将 start_node end_node 传递给graph.match()函数,如下所示,但它没有工作而是返回错误:节点对于关系匹配,必须绑定终点

d = Node("Person", name="Alice")
e = Node("Person", name="Bob")
relations = g.match(start_node=d, rel_type="KNOWS", end_node=e)
list(relations) // this returns error " Nodes for relationship match end points must be bound "

以上代码在Alice和Bob之间获取exixting关系有什么问题

1 个答案:

答案 0 :(得分:0)

以下代码中的问题

d = Node("Person", name="Alice")
e = Node("Person", name="Bob")
relations = g.match(start_node=d, rel_type="KNOWS", end_node=e)
list(relations) // this returns error " Nodes for relationship match end points must be bound "

Node 用于创建新节点,如注释中提到的@InverseFalcon。它没有指向服务器中的实际节点。它在创建节点时(我的问题中的第一组代码)检查节点的关系是因为在创建节点之后节点类返回节点对象。

以下代码适用于我的项目

d = g.run("MATCH (a:Person) WHERE a.name={b} RETURN a", b="Alice")
list_d = list(d)
start_node = list_d[0]['a']
e = g.run("MATCH (a:Person) WHERE a.name={b} RETURN a", b="Bob")
list_e = list(e)
end_node = list_e[0]['a']
relations = g.match(start_node=start_node, rel_type="KNOWS", end_node=end_node)