在 Cypher 中查找具有两个不同关系的节点

Find node having two distinct relationship in Cypher

我是 Cypher 的新手。我试图找到一个查询,该查询将使 returns 节点与其他节点具有不止一种关系。 结构请参考http://neo4j.com/docs/snapshot/images/cypher-match-graph.svg。 我正在努力寻找曾在某些电影中扮演过角色的人以及父亲。 当我在查询下方 运行 时,它给了我 0 条记录:

START n=node(*)
MATCH (n)-[r]->()
WHERE type(r)="ACTED_IN" AND type(r)="FATHER"
RETURN n,count(n); 

然而,当我在 运行 下方查询时,它会生成 return 数据,但我认为这不是我想要的:

START n=node(*)
MATCH (n)-[r]->()
WHERE type(r)="ACTED_IN" OR type(r)="FATHER"
RETURN n,count(n);

所以基本上,我需要一个只获取 Charlie Sheen 的查询,因为他出演了 华尔街 电影,也是 马丁·辛

我试图按照其他人在 Cypher query to find nodes that have 3 relationships or How to retrieve the nodes with multiple relationships using cypher query or Cypher query to find nodes that have 3 relationships 中所说的进行操作,但无法理解其中的技巧:(

如有任何帮助,我们将不胜感激!

正确的查询方式是:

MATCH (p:Person)-[:ACTED_IN]->(), (p)-[:FATHER]->()
RETURN p

您正在寻找具有 ACTED_IN 关系并且(因为再次使用 p)具有 :FATHER 关系的 :Person 节点。我在另一端使用匿名节点,因为我们对端点不感兴趣——只是它已连接这一事实很有趣。

另一种表达方式:

MATCH ()<-[:FATHER]-(p:Person)-[:ACTED_IN]->()
RETURN p

请注意,您不应再使用 START(除非查询手动索引)。​​