在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
我该怎么做?
答案 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