【问题标题】:Why does spring-data require START in a Cypher query?为什么 spring-data 在 Cypher 查询中需要 START?
【发布时间】:2014-01-02 01:56:20
【问题描述】:

我在 neo4j 数据库中输入了用户类型,该类型具有“注册”属性,该属性存储用户加入站点时的时间戳(长)。我想找出在给定日期之前有多少用户注册。我在 Spring-data Graph 存储库接口上定义了一个查询方法:

@Query("MATCH user=node:User WHERE user.registered < {0} RETURN count(*)")
def countUsersBefore(registered: java.lang.Long): java.lang.Long

我在 Neo4j 手册中看到很多以 MATCH 开头的查询,但 Spring-data 似乎不喜欢它并且需要 START。在我的情况下,我没有一个明显的节点可以从哪里开始,因为我的查询没有遵循任何关系,它只是一个简单的 count-where 组合。

如何解决此查询?我需要对“已注册”财产的索引吗?

【问题讨论】:

    标签: neo4j cypher spring-data-neo4j


    【解决方案1】:

    如果你想使用这种语法,你必须使用 Spring Data Neo4j 3.0-M01,它与 Neo4j 2.0.0-M06 一起使用。

    您还需要它才能使用标签。

    但最好等待 SDN 3.0 的下一个里程碑版本,它将与 Neo4j 2.0.0 final 一起使用。

    更新:

    如果使用SDN类型索引:

    START user=node:__types__(className="org.example.User") 
    WHERE user.registered < {0} 
    RETURN count(*) 
    

    或者在存储库中,这个派生方法应该可以工作:

    public interface UserRepository extends GraphRepository<User> {
      int countByRegisteredLessThan(int value);
    }
    

    【讨论】:

    • Michael,如果上面的“RETURN count(*)”查询可以通过 SDN 2.3 / Neo4j 1.9 完成,也许可以通过修复查询来完成
    【解决方案2】:

    你想要MATCH (user:User)...而不是MATCH user=node:User...

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-12-22
      • 1970-01-01
      • 2021-01-09
      • 1970-01-01
      • 1970-01-01
      • 2014-10-25
      • 2016-07-29
      相关资源
      最近更新 更多