【发布时间】:2015-01-31 18:04:21
【问题描述】:
在删除第一个节点之前,我正在尝试将所有传入和传出关系从一个节点转移到另一个节点。他们都有相同的标签。 我看到了这个Neo4j Cypher: copy relationships and delete node 但就我而言,我不知道关系的类型,我想转移传入和传出的关系。
我正在寻找密码查询或基于 neo4j.rb 的查询
【问题讨论】:
在删除第一个节点之前,我正在尝试将所有传入和传出关系从一个节点转移到另一个节点。他们都有相同的标签。 我看到了这个Neo4j Cypher: copy relationships and delete node 但就我而言,我不知道关系的类型,我想转移传入和传出的关系。
我正在寻找密码查询或基于 neo4j.rb 的查询
【问题讨论】:
我认为纯密码不可能做到这一点。这是我认为可行的使用 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
【讨论】:
exec
other 变量指定。这应该在WITH 子句中传递,然后在CREATE 子句中再次匹配。我可能会误会...
WITH 子句?
each 内的两行正在生成密码查询。方法调用链中间的with 是生成密码子句的WITH 部分的原因。我不是 100% 确定使用 with 会将一个 rel 的属性复制到另一个,但我看到有人在另一个 SO 帖子上使用相同的技术