我在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。在我的情况下,我没有一个明显的节点,我可以从哪里开始,因为我的查询不遵循任何关系,它只是一个普通的计数组合。
如何修复此查询?我是否需要“注册”财产的索引?
答案 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)
...