Cypher:基于多个 ASCII 代码片段匹配子图的最佳方法是什么?
Cypher: What is the best way to match subgraphs based on several ASCII-snippets?
我正在学习 Cypher/Neo4j 并且正在研究电影图数据集。
我想了解如何编写匹配更复杂的子图 和 return 整个子图的语句。
比如我想要演过和导演过同一部电影的人的子图,可以用:
MATCH (m:Movie) <-[:DIRECTED]-(p:Person) -[:ACTED_IN]-> (m:Movie)
RETURN *
但是,这只有效,因为我正在寻找的子图是一条直线。如果我想扩展上面的内容以匹配 A: 导演他们演过的电影和 B: 演过特定电影的人的子图 - "Movie X",我不知道该怎么做。我知道我可以使用 WHERE 语句来过滤掉演员未在 "Movie X" 中行动的子图,但这不会 return 表示 "Movie X".
的节点
我想知道是否有构建此类查询的方法 - 如下所示:
MATCH (p:Person) -[:ACTED_IN]-> (m:Movie) AND
(p:Person) -[:DIRECTED]-> (m:Movie) AND
(p:Person)-[:ACTED_IN]->(:Movie {title: 'Movie X'})
RETURN *
你绝对是在正确的道路上。试一试
MATCH (p:Person)-[:ACTED_IN]->(m:Movie)
WHERE (p)-[:DIRECTED]->(m)
AND (p)-[:ACTED_IN]->(:Movie {title: 'Movie X'})
RETURN *
在这种情况下,因为您已经知道您想要在电影 X 中扮演角色的人,所以在这种特定情况下更好的方法是立即匹配 'Movie X',例如...
MATCH (p:Person)-[:ACTED_IN]->(m:Movie {title: 'Movie X'})
WHERE (p)-[:DIRECTED]->(m)
RETURN *
为了 return 'Movie X'(虽然它应该是已经匹配的电影之一,但您需要在 MATCH
语句中识别它。您可以这样做。 ..
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, m2
我正在学习 Cypher/Neo4j 并且正在研究电影图数据集。 我想了解如何编写匹配更复杂的子图 和 return 整个子图的语句。
比如我想要演过和导演过同一部电影的人的子图,可以用:
MATCH (m:Movie) <-[:DIRECTED]-(p:Person) -[:ACTED_IN]-> (m:Movie)
RETURN *
但是,这只有效,因为我正在寻找的子图是一条直线。如果我想扩展上面的内容以匹配 A: 导演他们演过的电影和 B: 演过特定电影的人的子图 - "Movie X",我不知道该怎么做。我知道我可以使用 WHERE 语句来过滤掉演员未在 "Movie X" 中行动的子图,但这不会 return 表示 "Movie X".
的节点我想知道是否有构建此类查询的方法 - 如下所示:
MATCH (p:Person) -[:ACTED_IN]-> (m:Movie) AND
(p:Person) -[:DIRECTED]-> (m:Movie) AND
(p:Person)-[:ACTED_IN]->(:Movie {title: 'Movie X'})
RETURN *
你绝对是在正确的道路上。试一试
MATCH (p:Person)-[:ACTED_IN]->(m:Movie)
WHERE (p)-[:DIRECTED]->(m)
AND (p)-[:ACTED_IN]->(:Movie {title: 'Movie X'})
RETURN *
在这种情况下,因为您已经知道您想要在电影 X 中扮演角色的人,所以在这种特定情况下更好的方法是立即匹配 'Movie X',例如...
MATCH (p:Person)-[:ACTED_IN]->(m:Movie {title: 'Movie X'})
WHERE (p)-[:DIRECTED]->(m)
RETURN *
为了 return 'Movie X'(虽然它应该是已经匹配的电影之一,但您需要在 MATCH
语句中识别它。您可以这样做。 ..
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, m2