【问题标题】:Neo4J Query to Retrieve dataNeo4J 查询检索数据
【发布时间】:2020-03-15 18:48:05
【问题描述】:

我正在尝试在 Neo4J 中创建一个查询(这是我在学习过程中真正学到的东西),但我很挣扎。所以我正在使用提供的 Neo4J 沙盒和电影数据集(:play movie-graph)。这就是我要找的……

  1. 创建查询以检索在电影上映时与 55 岁或以上演员合作过的所有电影导演
  2. 为这些演员显示演员、作家和电影的网络

这就是我所拥有的,但我确信这是完全错误的。任何帮助将不胜感激!

MATCH (directors)<-[:DIRECTED]-(directors)-[:ACTED_IN]->(actors)-(actors: Age) WHERE actors.age >= 55 RETURN directors.name

【问题讨论】:

    标签: neo4j cypher


    【解决方案1】:

    这是一个查询,它将返回所有导演过 1970 年之前出生的演员的电影。将年份更改为您需要的任何年份以满足您的条件。

    MATCH (q)-[r:DIRECTED]->(k)<-[:ACTED_IN]-(s) where s.born<1970  RETURN DISTINCT q;
    

    给你一些建议,

    。了解 neo4j 节点和关系。在您的查询中,您写了(导演)、(演员)等。

    我在电影数据集中没有找到这些实体。它表明您需要了解这些概念以及这些概念在查询中的表示方式。浏览器控制台清楚地显示了这些实体。

    。了解关系方向以及它们在查询中的表示方式。

    。对上面的查询进行小修改,看看结果如何变化。例如,返回 s 而不是 q。删除 DISTINCT 子句等。

    。最后创建您自己的自定义数据集并尝试查询。

    祝你好运。

    【讨论】:

      【解决方案2】:

      要查找导演的电影上映时演员年龄在 55 岁以上的导演姓名,您可以利用新的existential subquery in neo4j 4.0:

      MATCH (actor:Person)-[:ACTED_IN]->(m)<-[:WROTE]->(w)
      WHERE m.released-actor.born >= 55
      RETURN actor, COLLECT(DISTINCT m) AS movies, COLLECT(DISTINCT w) AS writers
      

      要获取他们所在的电影上映时年满 55 岁的演员,以及这些电影的列表和他们的编剧名单:

      MATCH (w)-[:WROTE]->(m)<-[:ACTED_IN]-(actor:Person)
      WHERE m.released-actor.born >= 55
      RETURN actor, COLLECT(DISTINCT m) AS movies, COLLECT(DISTINCT w) AS writers
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-01-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-10-06
        • 1970-01-01
        相关资源
        最近更新 更多