Neo4j Cypher:基于几个ASCII代码段匹配子图的最佳方法是什么?
我正在学习Cypher/Neo4j,正在玩电影图形数据集。 我想了解如何编写语句来匹配更复杂的子图并返回整个子图 例如,如果我想要在同一部电影中扮演和导演的人的子图,我可以使用:Neo4j Cypher:基于几个ASCII代码段匹配子图的最佳方法是什么?,neo4j,cypher,graph-databases,Neo4j,Cypher,Graph Databases,我正在学习Cypher/Neo4j,正在玩电影图形数据集。 我想了解如何编写语句来匹配更复杂的子图并返回整个子图 例如,如果我想要在同一部电影中扮演和导演的人的子图,我可以使用: MATCH (m:Movie) <-[:DIRECTED]-(p:Person) -[:ACTED_IN]-> (m:Movie) RETURN * 你走的路绝对正确。试试这个 MATCH (p:Person)-[:ACTED_IN]->(m:Movie) WHERE (p)-[:DIRECTED]
MATCH (m:Movie) <-[:DIRECTED]-(p:Person) -[:ACTED_IN]-> (m:Movie)
RETURN *
你走的路绝对正确。试试这个
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 *
要返回“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
谢谢,但这不起作用,因为它没有返回表示“Movie X”的节点,很遗憾。很有趣。这是多余的,您可以在第一行匹配“Movie X”,但它应该起作用。我理解“Movie X”在这种情况下,条件不提供任何额外的信息。但是,我只希望能够控制是否返回节点。例如,如果我想返回表示p在2000年之后发布的电影的节点,也必须返回节点。编辑中的查询与我尝试的查询不同不过,我在寻找一个子图,其中一个人p在任何电影m中扮演+导演,并且在特定的电影“电影X”中扮演。第一个标识了正确的案例,但它不会返回两部电影对应的节点。啊,第三个正是我要找的。我不知道你可以“链接”几个匹配语句。谢谢!
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