Neo4J Cypher中是否有一些固有的滤波器?

时间:2014-02-13 02:59:38

标签: neo4j cypher

在本教程中,有以下Cypher查询:

MATCH (gene:Person)-[:ACTED_IN]->()<-[:ACTED_IN]-(other)
WHERE gene.name="Gene Hackman"
RETURN DISTINCT other;

我一般都了解查询。匹配ACTED_IN&#34;任何&#34;的所有Person节点节点,其中基因:Person节点的名称属性等于&#34; Gene Hackman&#34;。

然后返回一组独特的&#34;其他&#34; ACTED_IN同一组&#34;任何&#34;节点作为Gene Hackman。

返回的是一组节点,不包括Gene Hackman节点。

似乎返回的节点集将包含Gene Hackman节点。没有明确过滤掉包含名称&#34; Gene Hackman&#34;在Cypher查询中。因此,与Gene Hackman在同一部电影中扮演的节点集也应包括Gene Hackman。

我假设有一些固有的规则正在应用,但到目前为止的教程还没有说明该规则是什么,或者我只是错过了它:^)。

谢谢, 托德

2 个答案:

答案 0 :(得分:2)

规则是模式中的关系不会被重用。一旦您遵循第一个:ACTED_IN关系,就无法在相同的模式匹配中再次关注它。

答案 1 :(得分:0)

Wes的答案还可以,并帮助了我。另请注意,即使您使用2路径编写查询

,此规则仍然有效
MATCH (gene:Person)-[:ACTED_IN]->(m),
      (m)<-[:ACTED_IN]-(other)
WHERE gene.name="Gene Hackman"
RETURN DISTINCT other;