Neo4j:查找出演和导演任何电影的人
Neo4j: Find Person who acted in and directed any movies
我想显示所有既演又导演的人。如果这个人导演了一部电影但不在电影中表演并不重要。只要节点上存在边 ACTED_IN 和 DIRECTED,查询就会显示结果。
我尝试了几个 Cypher 查询。我相信这个显示了我想要的最接近的结果:
MATCH (p:Person)-[:ACTED_IN]->(m:Movie)
WHERE exists( (p)-[:DIRECTED]->() )
RETURN distinct *
现在,问题是,其中一个结果显示 "James Marshall" ACTED_IN "A Few Good Men" 但他还导演了两部不同的电影,即 "Ninja Assasin" 和 "V for Vendetta".
我目前的结果只显示"James Marshall" ACTED_IN "A Few Good Men" 而没有显示他导演的其他两部电影。那么,我该如何改进我的 Cypher?
您可以先匹配具有您需要的关系的人(这将是度数检查),然后同时使用两种关系匹配模式(否则将是相关关系的 OR 匹配) :
MATCH (p:Person)
WHERE (p)-[:ACTED_IN]->() AND (p)-[:DIRECTED->()
MATCH path = (p)-[:ACTED_IN | DIRECTED]->(m:Movie)
RETURN path
您可以使用本文中的解决方案post
关键是要在相反的方向添加另一个关系(电影从右到左),然后在WHERE子句中添加条件。
MATCH (a1:Person)-[:ACTED_IN]->(m:Movie)<-[:ACTED_IN]-(a2:Person)
WHERE exists( (a2)-[:DIRECTED]->(m) ) RETURN a2, m
我想显示所有既演又导演的人。如果这个人导演了一部电影但不在电影中表演并不重要。只要节点上存在边 ACTED_IN 和 DIRECTED,查询就会显示结果。
我尝试了几个 Cypher 查询。我相信这个显示了我想要的最接近的结果:
MATCH (p:Person)-[:ACTED_IN]->(m:Movie)
WHERE exists( (p)-[:DIRECTED]->() )
RETURN distinct *
现在,问题是,其中一个结果显示 "James Marshall" ACTED_IN "A Few Good Men" 但他还导演了两部不同的电影,即 "Ninja Assasin" 和 "V for Vendetta".
我目前的结果只显示"James Marshall" ACTED_IN "A Few Good Men" 而没有显示他导演的其他两部电影。那么,我该如何改进我的 Cypher?
您可以先匹配具有您需要的关系的人(这将是度数检查),然后同时使用两种关系匹配模式(否则将是相关关系的 OR 匹配) :
MATCH (p:Person)
WHERE (p)-[:ACTED_IN]->() AND (p)-[:DIRECTED->()
MATCH path = (p)-[:ACTED_IN | DIRECTED]->(m:Movie)
RETURN path
您可以使用本文中的解决方案post
关键是要在相反的方向添加另一个关系(电影从右到左),然后在WHERE子句中添加条件。
MATCH (a1:Person)-[:ACTED_IN]->(m:Movie)<-[:ACTED_IN]-(a2:Person) WHERE exists( (a2)-[:DIRECTED]->(m) ) RETURN a2, m