重置查询基数
在查询执行时,它们会累积结果行。Cypher 对每行执行操作。当查询由完全独立的部分组成,彼此之间没有关系,并且您不想将单个查询拆分为多个查询时,有时需要一种方法将基数重置回 1 以避免多次执行操作。
例如,使用电影图,让我们编写一个查询来标记演员,然后创建一个新的 :Movie
节点。
MATCH (p:Person)
WHERE (p)-[:ACTED_IN]->(:Movie)
SET p:Actor
CREATE (:Movie{title:'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'})
此页面是否有帮助?