我正在学习Cypher/Neo4j,并在玩电影图形数据集。我想了解如何编写匹配更复杂的子图并返回整个子图的语句。
例如,如果我想要拍摄和导演同一部电影的人的子图,我可以使用:
MATCH (m:Movie) <-[:DIRECTED]-(p:Person) -[:ACTED_IN]-> (m:Movie)
RETURN *然而,这仅仅是因为我要寻找的子图是一条直线。如果我想把上面的内容扩展到匹配A:导演一部电影和B:在一部电影中扮演的人的子图--“电影X",我就不知道该怎么做了。我知道我可以使用WHERE语句过滤出参与者没有在"Movie“中操作的子图,但是这不会返回表示"Movie”的节点。
我想知道是否有一种方法可以构造这样的查询--如下所示:
MATCH (p:Person) -[:ACTED_IN]-> (m:Movie) AND
(p:Person) -[:DIRECTED]-> (m:Movie) AND
(p:Person)-[:ACTED_IN]->(:Movie {title: 'Movie X'})
RETURN *发布于 2019-12-10 16:01:50
你绝对走在正确的道路上。试试看
MATCH (p:Person)-[:ACTED_IN]->(m:Movie)
WHERE (p)-[:DIRECTED]->(m)
AND (p)-[:ACTED_IN]->(:Movie {title: 'Movie X'})
RETURN *在这种情况下,由于您已经知道您想要的人在电影X,一个更好的方法,在这个特定的情况下,将匹配‘电影X’的权利,如.
MATCH (p:Person)-[:ACTED_IN]->(m:Movie {title: 'Movie X'})
WHERE (p)-[:DIRECTED]->(m)
RETURN *为了返回‘movies’(虽然它应该是已经匹配的电影之一),您需要在MATCH语句中识别它。YOu可以做这样的事..。
MATCH (p:Person)-[:ACTED_IN]->(m:Movie)
WHERE (p)-[:DIRECTED]->(m)
WITH p, m
MATCH (p)-[:ACTED_IN]->(m2:Movie {title: 'Movie X'})
RETURN p, m, m2https://stackoverflow.com/questions/59271038
复制相似问题