【问题标题】:cypher query: combination of collect and foreach密码查询:collect 和 foreach 的组合
【发布时间】:2014-04-25 23:56:19
【问题描述】:

我想用 cypher 编写一个查询,以找出在布洛克·莱斯纳出演的所有电影中有多少演员出演过。我的计划是收集布洛克斯纳尔出演的所有电影,然后循环浏览每部电影,看看所有电影中是否有共同的演员。我无法编写相同的查询。谁能给我一些关于如何解决这个问题的建议?

match (a:`ACTOR` {name: 'Brock Lesnar'})-[:ACTS_IN]->(m:`MOVIES`) collect(m.title) as      movies foreach(c in movies return (actor)-[:ACTS_IN]->(c))

这是我到目前为止所写的。我知道这是不对的,但这是我编码问题的地方

【问题讨论】:

    标签: neo4j cypher


    【解决方案1】:

    下面的 Cypher 查询将使用您的可选架构为您提供 Brock Lesnar 的有序列表。

    MATCH (actor:ACTOR { name: "Brock Lesnar" })-[:ACTS_IN]->(movie:MOVIES)
    WITH collect(movie) as movies, actor
    MATCH (coactors:ACTOR)-[:ACTS_IN]->()<-[:ACTS_IN]-(actor)
    WHERE ALL(movie in movies WHERE (movie)<-[:ACTS_IN]-(coactors))
    RETURN DISTINCT coactors.name
    

    【讨论】:

    • 它返回零行。你能告诉我你为什么要与众不同吗?也让我再重复一遍我的问题,我想要在“所有”莱斯纳电影中表演过的演员的名字
    • 完全不正确,我发布了正确答案,我想通了
    • 很高兴你能弄明白
    【解决方案2】:

    这是我创建的查询。它首先收集了莱斯纳演过的所有电影。然后检查所有演员是否出演过所有电影

    MATCH (actor:ACTOR{name:'Brock Lesnar'})-[:ACTS_IN]->(movie)
    with actor,collect(movie.title) as movieCollection
    WHERE ALL (movies IN movieCollection WHERE (actor)-[:ACTS_IN]->(movies)) AND NOT  actor.name = "Brock Lesnar"
    return actor.name
    

    【讨论】:

    • 这个 Cypher 查询实际上不起作用。您正在对 movie.title 进行收集,然后您正在使用将返回错误的路径表达式执行谓词操作。我更新了我的查询,并修正了我的错误。我建议使用这个查询。
    • 我的查询是正确的,除了我需要放置一个与名称等于 brock lesner 的演员不同的“演员”。是的,你是对的,你现在已经构建了写查询。不要降级我的答案,因为我的答案让您想到使用“全部”并提出更好的查询。在第一次尝试中你也弄错了
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-08
    • 1970-01-01
    相关资源
    最近更新 更多