【问题标题】:Is there some inherent filter in Neo4J Cypher?Neo4J Cypher 中是否有一些固有的过滤器?
【发布时间】:2014-03-10 18:13:38
【问题描述】:

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

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

我大致了解该查询。匹配 ACTED_IN "any" 节点的所有 Person 节点,其中 gene:Person 节点的 name 属性等于 "Gene Hackman"。

然后返回一组不同的“其他”节点,这些节点 ACTED_IN 与 Gene Hackman 相同的一组“任何”节点。

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

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

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

谢谢, 托德

【问题讨论】:

    标签: neo4j cypher


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      Wes 的回答还可以,对我也有帮助。另外请注意,即使您使用 2 个路径编写查询,此规则仍然有效

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

      【讨论】:

        猜你喜欢
        • 2018-06-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-07-26
        • 2014-07-28
        相关资源
        最近更新 更多