重置查询基数
随着查询的执行,它们会构建结果行。Cypher 按行执行操作。当一个查询由完全独立、互不相关的部分组成,并且您不想将单个查询拆分为多个查询时,有时需要一种方法将基数重置回 1,以避免多次执行某个操作。
例如,使用电影图谱,让我们编写一个查询来标记演员,然后创建一个新的 :Movie
节点。
MATCH (p:Person)
WHERE (p)-[:ACTED_IN]->(:Movie)
SET p:Actor
CREATE (:Movie{title:'The Animatrix'})
当在单个查询中运行时,您会看到创建了多个“The Animatrix”节点,而不仅仅是一个。这是因为 CREATE
子句按行执行,在 CREATE
执行之前,我们为每个 :Actor
都有一行。
尽管您可以通过使用 MERGE
而不是 CREATE
来避免额外的节点创建,但您仍然需要为每行执行多个冗余的 MERGE
操作付出代价,这些数据库命中是完全不必要的。
若要在查询的下一部分之前将基数重置回 1,您需要对某个任意值使用 WITH DISTINCT
。
MATCH (p:Person)
WHERE (p)-[:ACTED_IN]->(:Movie)
SET p:Actor
WITH DISTINCT 1 AS ignored
CREATE (:Movie{title:'The Animatrix'})
此页有帮助吗?