【问题标题】:Neo4J Movie-Graph - actors with same ageNeo4J Movie-Graph - 同龄演员
【发布时间】:2021-01-29 08:32:19
【问题描述】:

我想在 Neo4J 中用提供的电影数据集(:play movie-graph)分析那些同年出生的演员,然后执行一个查询,可以得到哪些同龄演员工作过一起。为此,我尝试在数据库中创建同一年出生的演员之间的关系类型“HAS_SAME_AGE”,但它给了我一个错误,我不知道如何继续。

这是我写的:

MATCH (a:Person),(b:Person) WHERE a.born=b.born WITH a AS PersonA, b AS PersonB MERGE (PersonA)- [:HAS_SAME_AGE]-(PersonB)

有人可以帮我填写正确的代码吗?任何帮助将不胜感激!

【问题讨论】:

    标签: neo4j cypher


    【解决方案1】:
    1. 添加冗余数据是不好的做法(例如,复制您已经可以通过其他方式从数据库中获取的信息的关系),除非有很好的理由(例如,否则您无法满足严格的性能要求) .

      很容易让所有同年出生的演员都没有关系。例如:

      MATCH (p:Person)
      RETURN p.born AS year, COLLECT(p) AS actors
      

      因此,除非您迫切需要更快地获取相同的信息,否则您应该只使用上述类型的查询,而不是存储冗余关系。

    2. 但是,如果您真的确实需要添加关系,您可以执行以下操作:

      MATCH (p:Person)
      WITH p.born AS year, COLLECT(p) AS ps
      UNWIND apoc.coll.combinations(ps, 2) AS pair
      WITH pair[0] AS p1, pair[1] AS p2
      MERGE (p1)-[:HAS_SAME_AGE]-(p2)
      

      APOC 函数apoc.coll.combinations 用于生成不同的同一年出生的演员对。

    【讨论】:

      猜你喜欢
      • 2019-04-16
      • 2015-09-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多