Neo4j:查找出演和导演任何电影的人

标签 neo4j cypher match movie

我想展示所有表演和导演电影的人。如果该人执导电影但不参演电影,这并不重要。只要节点上存在边 ACTED_IN 和 DIRECTED,查询就会显示结果。

我尝试了几个 Cypher 查询。我相信这显示了我想要的最接近的结果:

MATCH (p:Person)-[:ACTED_IN]->(m:Movie)
WHERE exists( (p)-[:DIRECTED]->() )
RETURN distinct *

现在的问题是,其中一个结果显示“詹姆斯·编码(marshal)”出演了《好男人》,但他还导演了两部不同的电影,即《忍者刺客》和《V字仇杀队》。

我当前的结果仅显示“詹姆斯·编码(marshal)”在《好男人》中的表演,而不显示他导演的其他两部电影。那么,我该如何改进我的 Cypher?

最佳答案

您可以首先匹配具有所需关系的人员(这将是一个程度检查),然后同时使用这两种关系对模式进行匹配(否则这将是对相关关系的 OR 匹配):

MATCH (p:Person)
WHERE (p)-[:ACTED_IN]->() AND (p)-[:DIRECTED->()
MATCH path = (p)-[:ACTED_IN | DIRECTED]->(m:Movie)
RETURN path

关于Neo4j:查找出演和导演任何电影的人,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56497380/

相关文章:

node.js - 如何在 Neo4j 中使用 UUID,将指针保存到其他地方的 Node ?

Neo4j (/) 除以零 ( 0 )

javascript - 需要帮助理解 Javascript 的 .match 方法

node.js - 如何创建带有变量标签的 Node ?

python - Neo4J/py2neo——在事务中创建 `Relationship`?

Neo4j:匹配多个标签(2个或更多)

neo4j - 当条件为真时使 neo4j/cypher 查询停止

regex - awk 从一个文件中搜索列,如果匹配从两个文件中打印列

c# - 如何删除 MatchCollection 中的重复匹配项

java - 如果对象基于相同的 NodeEntity,则引用相同的实例