一起运行两个部分相关的密码查询

问题描述 投票:0回答:1

我需要从 Neo4j 数据库中获取两个相关的集合。

第一个是获取一些满足条件列表的东西,如下所示:

  1. MATCH (n:Thing) WHERE [complicated list of conditions] RETURN n ORDER BY n.label LIMIT 25

第二个是获取与满足条件的节点相关的节点,类似这样:

  1. 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 可能有用,但它不太适合用例。

neo4j cypher
1个回答
0
投票

您可以使用两个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
© www.soinside.com 2019 - 2024. All rights reserved.