【问题标题】:Repository method for finding node connected to arbitrary number of other nodes用于查找连接到任意数量的其他节点的节点的存储库方法
【发布时间】:2014-09-25 22:36:38
【问题描述】:

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

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); 
 }

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

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

我该怎么做?

【问题讨论】:

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


    【解决方案1】:

    我会试试这个。

    @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 相关的所有 Foo。他们测试是否存在预期数量的关系。如果您在给定的 Foo 和 Bar 之间有多个相同类型的关系,这将不起作用。

    为此,您可以在 COLLECT 聚合中添加 DISTINCT 修饰符:

    WITH foo, COLLECT(DISTINCT bar) AS rels
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多