将所有关系移动/复制到不同节点

问题描述 投票:0回答:2

有没有办法将关系从一个节点复制或移动到另一个节点?

我这里也有类似的情况:

neo4j 合并 2 个或多个重复节点

这里:

使用 Cypher 复制不同类型的关系

假设我在图中有这个模式

(a)-[r:FOO]->(b)
(a)<-[r2:BAR]-(c)

然后我有另一个节点,

(d)
,它可能是也可能不是
(a)
的重复。我的想法是,从功能的角度来看,节点是否重复并不重要。我希望能够移动或复制关系
r:FOO
r2:BAR
,以便图表现在包括

(d)-[r:FOO]->(b)
(d)<-[r2:BAR]-(c)

如果我在有重复项时这样做来合并节点,我希望能够移动关系而不是复制,然后(也许可选)删除

(a)
。请注意,关系类型不止一种,我不确定这些类型是什么。我意识到我可以分阶段执行此操作,但我认为如果有一种有效的方法可以在一个密码查询中执行此操作,那就太好了。我当前的策略类似于(不是确切的语法,只是提供一个想法)

// get all outgoing relationships
MATCH (a:Label1 { title : 'blah' })-[r]->(o)
RETURN r
// returns FOO and BAR

// for each relationship type, create one from (d) and copy the properties over
MATCH (a:Label1 { title : 'blah' })-[r:FOO]->(o), (d:Label1 { title : 'blah blah' })
CREATE (d)-[r2:FOO]->(o)
SET r2 = r
...etc...

// now do the same for incoming relationships
MATCH (a:Label1 { title : 'blah' })<-[r]-(o)
RETURN r
// returns FOO and BAR
// for each relationship type, create one from (d) and copy the properties over
MATCH (a:Label1 { title : 'blah' })<-[r:FOO]-(o), (d:Label1 { title : 'blah blah' })
CREATE (d)<-[r2:FOO]-(o)
SET r2 = r
...etc...

// finally delete node and relationships (if required)
MATCH (a:Label1 { title : 'blah' })-[r]-(o)
DELETE r, a

然而,这依赖于大量查询和交易。能够在一个查询中实现这一点(在我的简单观点中)会更可取。然而,我不相信 cypher 中存在这样的东西。难道我错了?

有什么想法吗?如果不清楚,请告诉我,我将尝试进一步详细说明和解释。

作为信息,我正在使用 Neo4j 2.1.6 社区版(带有来自 .NET 应用程序的 neo4jclient)。

刚刚意识到我还必须重复我的过程来解释关系的方向,除非我弄错了?即从

(a)
获取所有传出关系,将它们重新创建为从
(d)
传出,然后对所有传入关系执行相同的操作。上面的密码已进行相应编辑。

更新:我猜这是一个白日梦,根本不可能。谁能证实这一点吗?即使是“不!”,最好能有一个明确的答案。如果是这样,我会考虑询问 Neo4j 的人,这个功能是否可行并且值得考虑。

更新2:由于缺乏想法,我猜这是不可能完成的。我当然没有进一步的研究或实验。看来功能请求是一条出路。我不是唯一一个发现此功能特别有用的人。

neo4j cypher
2个回答
0
投票

我认为你可以将它们链接在一起:

// get all relationships
MATCH
  (a:Label1 { title : 'blah' })-[r]-(o),
  (d:Label1 { title : 'blah blah' })
CREATE (d)-[r2:type(r)]-(o)
DELETE r, a

我唯一不完全确定的是是否能够在使用

type()
函数的地方使用它。我现在就尝试一下


0
投票

我找到了这个

apoc.refactor.to
apoc.refactor.from
程序来执行此操作:https://neo4j.com/labs/apoc/4.1/overview/apoc.refactor/apoc.refactor.to/

© www.soinside.com 2019 - 2024. All rights reserved.