【问题标题】:neo4j create the opposite edgeneo4j 创建对边
【发布时间】:2017-04-24 17:14:44
【问题描述】:

我是 neo4j 和 cypher 的新手,我需要创建图形所有边的对边,但我需要对边具有与原始边相同的类型
为了说明,(a)-[:sometype]->(b) 的反面将是 (b)-[:sometype]->(a)
我知道只需点击此命令即可轻松创建所有边缘的对面 match (a)-[]->(b) create (b)-[]->(a)
但正如我已经说过的,我需要创建的边缘具有与原始边缘相同的类型 谢谢

【问题讨论】:

  • 您需要这个有什么特别的原因吗? Neo4j 可以在任一方向遍历关系。如果您确实需要这个,如果您还没有安装APOC Procedures,您可以安装它吗?它有一些可以提供帮助的动态关系创建程序。
  • 强调@InverseFalcon 的观点之一:除非您的用例有非常好的理由在两个方向上具有相同的关系类型,否则您不想这样做-- 因为相同的关系可以很容易地在两个方向上遍历,这会浪费数据库存储,并且会使您的查询变得更慢和更复杂。

标签: neo4j cypher


【解决方案1】:

根据this comment 在 neo4j 的 Github 中的一个未决问题中,这还不可能。

正如 InverseFalcon 在此评论中所说,您可以使用 APOC Procedures 来实现此目标,如 Mark Needham 博客中的 this post 中所述。

拳头,安装 Apoc 程序。在此之后,例如:

CREATE (a)-[:sometype]->(b)

//Match...
MATCH (a)-[r]->(b)
WITH r, a, b
// and use apoc.create.relationship to achieve your goal...
CALL apoc.create.relationship(b, TYPE(r), {}, a) YIELD rel
RETURN rel

在这里测试:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多