【问题标题】:Neo4j Cypher : transfer all relationships before replacing a node by anotherNeo4j Cypher:在用另一个节点替换节点之前转移所有关系
【发布时间】:2015-01-31 18:04:21
【问题描述】:

在删除第一个节点之前,我正在尝试将所有传入和传出关系从一个节点转移到另一个节点。他们都有相同的标签。 我看到了这个Neo4j Cypher: copy relationships and delete node 但就我而言,我不知道关系的类型,我想转移传入和传出的关系。

我正在寻找密码查询或基于 neo4j.rb 的查询

【问题讨论】:

    标签: neo4j cypher neo4j.rb


    【解决方案1】:

    我认为纯密码不可能做到这一点。这是我认为可行的使用 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
    

    【讨论】:

    • 我得到了类型,但是在每个循环中我不确定如何为 new_rel 指定另一个节点。再次感谢布赖恩;)
    • 刚刚编辑,因为第二个查询方向错误,他们都需要exec
    • 另一个节点由other 变量指定。这应该在WITH 子句中传递,然后在CREATE 子句中再次匹配。我可能会误会...
    • 对不起,我还在为此苦苦挣扎。假设加载了 node1 和 node2,我们希望将关系从 node1 转移到 node2。在这种情况下,您将如何使用WITH 子句?
    • each 内的两行正在生成密码查询。方法调用链中间的with 是生成密码子句的WITH 部分的原因。我不是 100% 确定使用 with 会将一个 rel 的属性复制到另一个,但我看到有人在另一个 SO 帖子上使用相同的技术
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多