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

时间:2015-06-04 14:11:40

标签: graph neo4j cypher relationship

我是Cypher的新手。我试图找到一个查询,它将返回与其他节点有多个关系的节点。 有关结构,请参阅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); 

然而,当我在查询下面运行时,它会返回数据,但我认为这不是我想要的:

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

所以基本上,我需要一个只能获取 Charlie Sheen 的查询,因为他演的是华尔街电影,也是 Martin Sheen的父亲

我试图关注其他人在Cypher query to find nodes that have 3 relationshipsHow to retrieve the nodes with multiple relationships using cypher queryCypher query to find nodes that have 3 relationships中所说的内容,但却无法理解这个伎俩:(

任何帮助都会非常感激!

1 个答案:

答案 0 :(得分:2)

查询此问题的正确方法是:

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

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

另一种表达方式:

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

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