我试图检查是否存在任何一种关系组合,但我只关心是否至少存在一种。由于遍历的复杂性增加,如果我可以在第一次匹配时中断并返回查询,那就太理想了。
例子:
MATCH (p:Person { id: "user_1" }), (m:Movie { id: "movie_x" })
OPTIONAL MATCH (p)-[acted:ACTED_IN]->(m)
OPTIONAL MATCH (p)-[directed:DIRECTED]->(m)
OPTIONAL MATCH (p)-[:ACTED_IN]->(:Movie)<-[:PRODUCED_BY]-(:Studio)-[sibling_actor:PRODUCED_BY]->(m)
OPTIONAL MATCH (p)-[:DIRECTED]->(:Movie)-[:OF_TYPE]->(:Genre)<-[sibling_director:OF_TYPE]-(m)
RETURN count(acted) > 0 AS actedInMovie, count(directed) > 0 AS directedMovie, count(sibling_actor) > 0 AS actedInSibling, count(sibling_director) > 0 AS directedSibling
这将返回这些模式中每个模式存在的真实性,但由于我只关心是否有一个匹配,因此如果第一个找到匹配,我不想运行所有四个可选匹配。
要测试您正在查找的模式是否存在,请使用EXISTS 子查询:
这将与运算符一起计划,如果前一个子查询返回 false,则
SelectOrSemiApply
仅对子查询进行评估。EXISTS