为什么spring-data在Cypher查询中需要START?

时间:2014-01-02 01:56:20

标签: neo4j cypher spring-data-neo4j

我在neo4j数据库中有用户类型,其中有一个'registered'属性,用于存储用户加入站点时的时间戳(Long)。我想知道在给定日期之前有多少用户注册了。我在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。在我的情况下,我没有一个明显的节点,我可以从哪里开始,因为我的查询不遵循任何关系,它只是一个普通的计数组合。

如何修复此查询?我是否需要“注册”财产的索引?

2 个答案:

答案 0 :(得分:2)

如果你想使用这种语法,你必须使用适用于Neo4j 2.0.0-M06的Spring Data Neo4j 3.0-M01。

您还需要能够使用标签。

但最好等待下一个里程碑版本的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);
}

答案 1 :(得分:0)

而不是MATCH user=node:User ...,您需要MATCH (user:User) ...