【发布时间】:2019-09-27 22:38:38
【问题描述】:
我正在使用 Neo4j,想知道如何使用 Cypher 来遍历连接一个节点的其他节点的属性以进行比较并过滤满足条件的节点。
这里是示例数据:
Person Movie Publish_Date
Tina A 2016-01-01
Tina B 2016-01-01
Tina C 2016-03-05
Tina D 2016-03-06
Tina X 2018-03-09
Bob E 2016-08-01
Bob F 2016-08-08
Ana G 2016-04-05
Ana H 2016-08-05
Ana I 2016-12-05
这就是我想要的:
Person Movie Publish_Date
Tina A 2016-01-01
Tina B 2016-01-01
Tina C 2016-03-05
Tina D 2016-03-06
Tina X 2018-03-09
Bob E 2016-08-01
Bob F 2016-08-08
我想退回参与30天内发行的2部电影以上的人和电影信息。
我的想法是对每个人,遍历与他连接的电影节点的发布日期,并将满足条件的保留在结果表中。
这是我获取示例数据的查询:
MATCH (p:Person)-[r1:ACTED_IN]->(m:Movie)
WITH p, m
ORDER BY p.Name DESC, n.Publish_Date
RETURN p.name AS Person, m.title AS Movie, m.publish_date AS Publish_Date
请提出建议。
提前致谢!
【问题讨论】:
-
你能澄清时间限制吗?这是在过去 30 天内发行的超过 2 部电影,还是在大约 30 天内发行的超过 2 部电影?重叠事件怎么样,比如电影 1 和 2 和 3 发生在 30 天的时间范围内,但电影 2 和 3 以及 4 和 5 也在 30 天的时间范围内?这是否意味着您也需要在此范围内更小的时间范围(2 和 3 和 4 也是如此)?
-
您好,感谢您的提问!我想要在大约 30 天的时间内出版 2 部电影。对于您提到的重叠情况,我想要 1、2、3、4 和 5,因为它们都在至少 30 天内发布,另外还有 2 部电影
-
您可能需要稍微调整一下您的数据和结果,因为不应返回此条目
Tina X 2018-03-09,因为它是在2016-03-06上的上一部电影几年后发布的 -
您可能还想调整您的要求,因为您要返回 Bob 和两部电影,但您指定了
in more than 2 movies published in 30 days。您的意思是“30 天内至少发行 2 部电影”?
标签: neo4j cypher graph-databases