Neo4j 使用联合结果筛选匹配使用

Neo4j 使用联合结果筛选匹配使用,neo4j,cypher,Neo4j,Cypher,我希望使用联合(n)的结果作为后续匹配的过滤器 MATCH (n:Thing)-<<Insert valid match filters here>> RETURN n UNION MATCH (n:Thing)-<<Insert a different set of match filters here>> RETURN n; 我希望使用WITH语句,但我一直在努力弄清楚该语句的结构 MATCH (n:Thing)-<<Inser

我希望使用联合(n)的结果作为后续匹配的过滤器

MATCH (n:Thing)-<<Insert valid match filters here>> 
RETURN n
UNION
MATCH (n:Thing)-<<Insert a different set of match filters here>>
RETURN n;
我希望使用WITH语句,但我一直在努力弄清楚该语句的结构

MATCH (n:Thing)-<<Insert valid match filters here>> 
RETURN n
UNION
MATCH (n:Thing)-<<Insert a different set of match filters here>>
WITH n
MATCH (n)-[:RELTYPE1]->(a:Artifact);
RETURN a;
匹配(n:Thing)——
返回n
联合
匹配(n:事物)-
与n
匹配(n)-[:RELTYPE1]->(a:工件);
返回a;
这是我最初的尝试,但是WITH被解释为联合的第二个匹配的子查询的开始(这是有意义的)


我可以看到一些不雅观的方法,但什么是正确的方法

我一直在看你们工会的例子,这对我来说很有意义,但我看不出我如何才能让它发挥作用。但我肯定不是一个拥有所有答案的人。你为什么不能做这样的事

MATCH (n:Thing)
WHERE n.name = 'A'
WITH collect(n) as n1
MATCH (n:Thing)
WHERE n.name = 'B'
WITH n1 + collect(n) AS both
UNWIND both AS n
MATCH (n)-[:RELTYPE1]->(a:Artifact);
RETURN a;

在这方面已经有github问题,所以使用UNION和continue to filter/project将在某个时候出现。感谢您指出这一点。这正是我要找的。需要注意的一点是:这篇文章提供了一个今天如何做的示例,基本上是复制与聚合结果相反的匹配项,以出现在每个联合匹配中(因此是ax+bx而不是x(a+b)。我更喜欢Dave B的方法,因为不需要复制。这非常有效!我做的一个补充是在展开后放置一个“带不同的”,以确保集合中的唯一性。
MATCH (n:Thing)
WHERE n.name = 'A'
WITH collect(n) as n1
MATCH (n:Thing)
WHERE n.name = 'B'
WITH n1 + collect(n) AS both
UNWIND both AS n
MATCH (n)-[:RELTYPE1]->(a:Artifact);
RETURN a;