Cypher/Neo4j - 在联合子句后添加约束



我正在尝试做一个查询生成器,我需要包含对联合子句产生的结果的约束。我希望从我不希望在其末尾的节点列表中过滤联合子句的输出。

MATCH (n)-[r]->(x) 
WHERE ( 'filter1' IN r.property or  'filter2' IN r.property ) 
RETURN n,r,x 
UNION 
MATCH (n)-[r]->(x) 
WHERE ( 'foo2' IN n.property OR 'foo2' IN x.property 
RETURN n,r,x

例如,我需要在此查询中包含最终过滤器,以避免所有称为"任何"的节点。

怎么做呢? 只需在子句末尾加上 where 子句即可?

几周前我有一个类似的问题,事实证明Cypher目前不支持UNION后处理。

这意味着您应该使用相同的条件过滤并集的两个输入。

或者(如本答案所述),如果您可以使用 APOC,则可以对查询结果进行后处理:

CALL apoc.cypher.run("... UNION ...", NULL) YIELD n, r, x
WHERE ...
RETURN n, r, x;

更新:现在可以使用CALL {subquery}结构在 Neo4j 4.0 中执行此操作。

最新更新