当我使用事务创建两个节点及其关系时,如下所示,我可以使用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关系有什么问题
答案 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)