Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Neo4j Cypher:基于几个ASCII代码段匹配子图的最佳方法是什么?_Neo4j_Cypher_Graph Databases - Fatal编程技术网

Neo4j Cypher:基于几个ASCII代码段匹配子图的最佳方法是什么?

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]

我正在学习Cypher/Neo4j,正在玩电影图形数据集。 我想了解如何编写语句来匹配更复杂的子图并返回整个子图

例如,如果我想要在同一部电影中扮演和导演的人的子图,我可以使用:

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