2014-09-25 77 views
0

在弹簧数据的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); 
} 

我想写一个类似仓库的方法来查找已连接到的Bar秒的任意数量Foo

 @Query // ?? 
    Foo getFooBetween(Bar... bars); 

会如何做呢?

回答

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匹配所有酒吧,然后找到每个酒吧的相关的所有Foos。他们测试以确定是否有预期的关系数量。如果在给定的Foo和Bar之间有多个相同类型的关系,这将不起作用。

为迎合您可以在COLLECT聚集添加DISTINCT修改:

WITH foo, COLLECT(DISTINCT bar) AS rels 
相关问题