用于查找连接到任意数量的其他节点的节点的存储库方法

时间:2014-09-25 22:36:38

标签: java spring neo4j spring-data spring-data-neo4j

在spring-data-neo4j中,我可以使用以下存储库方法来查找连接到两个给定Foo个节点的Bar节点:

interface FooRepo extends GraphRepository<FooNode> { 
    @Query ("START a=node({0}), z=node({1}) " +  
            "MATCH (a)-[:REL]->(x:foo)<-[:REL]-(z) RETURN x")  
    Foo getFooBetween(Bar a, Bar b); 
 }

我想编写一个类似的存储库方法来查找连接到任意数量Foo的{​​{1}}:

Bar

我该怎么做?

1 个答案:

答案 0 :(得分:0)

我会尝试这个。

@Query("MATCH (bar:Bar)-[r:REL]->(foo:Foo)
        WHERE ID(bar) IN {0}
        WITH foo, COLLECT(bar) AS rels
        WHERE length(rels) = length({0})
        RETURN foo
Foo getFooBetween(List<Long> barIds)

它通过您传入的ID匹配所有Bars,然后查找每个Bar与之相关的所有Foos。他们测试是否有预期的关系数量。如果在给定的Foo和Bar之间有多个相同类型的关系,这将不起作用。

为了满足这一需求,您可以在DISTINCT聚合中添加COLLECT修饰符:

WITH foo, COLLECT(DISTINCT bar) AS rels