我需要从 Neo4j 数据库中获取两个相关的集合。
第一个是获取一些满足条件列表的东西,如下所示:
MATCH (n:Thing) WHERE [complicated list of conditions] RETURN n ORDER BY n.label LIMIT 25
第二个是获取与满足条件的节点相关的节点,类似这样:
MATCH (m:RelatedThing) -[:Relationship]-(n:Thing) WHERE [same complicated conditions about n] RETURN m ORDER BY m.label LIMIT 25
至关重要的是,m 不必与查询 1 返回的前 25 个 n 相关。
这两个查询之间似乎有很多重复。有没有办法在单个查询中运行它们?
显然这可以通过两个查询来完成,但是通读周围我还没有找到同时运行两个查询的好方法。看起来也许 COLLECT 可能有用,但它不太适合用例。
您可以使用两个CALL子查询:
MATCH (n:Thing) WHERE n.foo =123
WITH COLLECT(n) AS list
CALL {
WITH list
WITH list
UNWIND list AS x
RETURN x AS list1
ORDER BY x.label LIMIT 25
}
CALL {
WITH list
WITH list
UNWIND list AS y
MATCH (m:RelatedThing)-[:Relationship]-(y)
RETURN m AS list2
ORDER BY m.label LIMIT 25
}
RETURN list1, list2