用 Cypher 断开/替换子图边
Disconnect / replace subgraph edges with Cypher
我有一个图形数据模型,其中所有节点都连接到一个或多个 :policy 节点。
有时我需要修改子图,以便它用与新 P':policy 的关系替换与现有 P:policy 的所有关系。我想到的一般方法是识别与现有 P:policy 关联的顶点 V 和边 E 的子集;创建一个新的 P':policy,在 V 和 P' 之间创建新的关系 E',然后删除现有的关系 E.
我有一个识别相关 P、V 和 E 的可变长度查询;该查询看起来像这样:
MATCH p=(v {..})-[nodes*]->(policy:policy {..}) return policy as P, nodes(p) as V, relationships(p) as E
这作为独立查询工作正常,但要完成子图更新,我想做的是这样的:
MATCH p=(v {..})-[nodes*]->(policy:policy {..}) // find the sub-graph of interest
MERGE (P':policy {..})-[]-(..) // create new policy P'
MERGE nodes(p)-[..]-(P') // setup new relationships from nodes(p) to new policy P'
DELETE relationships(p) // delete existing relationships(p)
我是一个 Cypher 菜鸟,看来我不能在查询中使用节点 (p) 和关系 (p);想知道是否有人可以提供如何实现此目标的建议?
nodes()
和 relationships()
return 节点集合,这就是为什么不能合并或删除它们的原因。
要从集合获取单个节点或关系,您可以使用 UNWIND。
一个例子是
WITH nodes(p) as nodes
UNWIND nodes as node
MERGE (node)-.....
或
WITH relationships(p) as rels
UNWIND rels as rel
DELETE rel
如果您使用 APOC 程序,有多种重构程序可用于克隆节点及其关系,以及重构关系,具有将它们重定向到另一个节点的效果(但实际上使指向另一个节点的副本并删除原件)
请参阅 apoc.refactor.cloneNodesWithRelationships()
和 apoc.refactor.to()
(或 refactor.from(),具体取决于应将关系的哪一端重定向到新节点)。
安装 APOC 后,您可以使用 call apoc.help('refactor')
查看所有重构过程。
我有一个图形数据模型,其中所有节点都连接到一个或多个 :policy 节点。
有时我需要修改子图,以便它用与新 P':policy 的关系替换与现有 P:policy 的所有关系。我想到的一般方法是识别与现有 P:policy 关联的顶点 V 和边 E 的子集;创建一个新的 P':policy,在 V 和 P' 之间创建新的关系 E',然后删除现有的关系 E.
我有一个识别相关 P、V 和 E 的可变长度查询;该查询看起来像这样:
MATCH p=(v {..})-[nodes*]->(policy:policy {..}) return policy as P, nodes(p) as V, relationships(p) as E
这作为独立查询工作正常,但要完成子图更新,我想做的是这样的:
MATCH p=(v {..})-[nodes*]->(policy:policy {..}) // find the sub-graph of interest
MERGE (P':policy {..})-[]-(..) // create new policy P'
MERGE nodes(p)-[..]-(P') // setup new relationships from nodes(p) to new policy P'
DELETE relationships(p) // delete existing relationships(p)
我是一个 Cypher 菜鸟,看来我不能在查询中使用节点 (p) 和关系 (p);想知道是否有人可以提供如何实现此目标的建议?
nodes()
和 relationships()
return 节点集合,这就是为什么不能合并或删除它们的原因。
要从集合获取单个节点或关系,您可以使用 UNWIND。 一个例子是
WITH nodes(p) as nodes
UNWIND nodes as node
MERGE (node)-.....
或
WITH relationships(p) as rels
UNWIND rels as rel
DELETE rel
如果您使用 APOC 程序,有多种重构程序可用于克隆节点及其关系,以及重构关系,具有将它们重定向到另一个节点的效果(但实际上使指向另一个节点的副本并删除原件)
请参阅 apoc.refactor.cloneNodesWithRelationships()
和 apoc.refactor.to()
(或 refactor.from(),具体取决于应将关系的哪一端重定向到新节点)。
安装 APOC 后,您可以使用 call apoc.help('refactor')
查看所有重构过程。