我正在尝试做一个查询生成器,我需要包含对联合子句产生的结果的约束。我希望从我不希望在其末尾的节点列表中过滤联合子句的输出。
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 中执行此操作。