我正在使用py2neo(使用Relationship.push()方法)来更新现有关系的属性。关系属性已成功更新,但相关节点将清空其所有属性。这是标准行为吗?
感谢。
答案 0 :(得分:0)
我无法使用以下代码重新创建您描述的内容:
>>> from py2neo import *
>>> graph = Graph(password="p4ssw0rd")
>>> a = Node(name="Alice")
>>> b = Node(name="Bob")
>>> ab = Relationship(a, "KNOWS", b)
>>> graph.create(ab)
>>> remote(a)._id
1
>>> graph.evaluate("MATCH (n) WHERE id(n) = {x} RETURN n", x=1)
(alice {name:"Alice"})
>>> ab["since"] = 1999
>>> graph.push(ab)
>>> graph.evaluate("MATCH (n) WHERE id(n) = {x} RETURN n", x=1)
(alice {name:"Alice"})
那就是说,请记住,你所描述的推动关系的事实上正在推动整个子图由关系及其开始和结束节点组成。因此,如果这些节点的本地副本不包含任何属性,则将其视为通过删除远程属性来更新远程节点的信号。
由于这个"整个子图更新"在推送它们之前,您需要确保节点的本地副本是最新的。也许先将它们拉出来。没有更高级别的API操作来推动关系并忽略节点,这些操作适用于整个子图。否则,您需要进入Cypher。