我试图将一个节点的所有入站和出站关系转移到另一个节点,然后再删除第一个节点。它们都具有相同的标签。
我看到了这个 Neo4j Cypher: copy relationships and delete node
但在我的情况下,我不知道关系的类型,并且我想转移所有入站和出站关系。
我正在寻找基于Cypher查询或基于neo4j.rb的查询。
我认为纯Cypher无法实现这一点。以下是使用neo4j.rb的解决方案,我认为可以起作用:
# Assuming node1 already loaded
node_query = Neo4j::Session.query.match(node: {neo_id: node1.neo_id})
types = node_query.match('node-[rel]-()').pluck('DISTINCT type(rel)')
types.each do |type|
node_query.match('node-[rel]->(other)').with(:node, :rel, :other).create("node-[new_rel]->other").set('new_rel = rel').exec
node_query.match('node<-[rel]-(other)').with(:node, :rel, :other).create("node<-[new_rel]-other").set('new_rel = rel').exec
end
each
内的两行代码正在生成 Cypher 查询。方法调用链中间的with
是生成 Cypher 子句中的WITH
部分的原因。我不确定使用with
是否会将一个关系的属性复制到另一个关系,但我在另一个 SO 帖子上看到有人使用了相同的技术。 - Brian Underwoodrelations = self.rels(dir: :incoming) relations.each do |rel| if defined? rel.from_node rel.from_node.create_rel(rel.type, new_node, rel.props) end end`
- armedwing