FOREACH

列表路径 是 Cypher® 的关键概念。FOREACH 子句可用于更新数据,例如对路径中的元素或通过聚合创建的列表执行更新命令。

FOREACH 括号内的变量上下文与其外部的上下文是分开的。这意味着如果在 CREATE 一个节点变量,你将 无法 在 foreach 语句外使用它,除非你通过匹配来查找它。

FOREACH 括号内,你可以执行任意更新命令——SET、REMOVE、CREATE、MERGE、DELETE 和 FOREACH。

如果你想对列表中的每个元素执行额外的 MATCH,则 UNWIND 子句会是更合适的命令。

标记路径上的所有节点

此查询将在路径上的所有节点上将属性 marked 设置为 true

查询
MATCH p=(start)-[*]->(finish)
WHERE start.name = 'A' AND finish.name = 'D'
FOREACH (n IN nodes(p) | SET n.marked = true)
结果

(空结果)

行数:0
已设置属性:4

标记路径上的所有关系

此查询将在路径上的所有关系上将属性 marked 设置为 true

MATCH p=(start)-[*]->(finish)
WHERE start.name = 'A' AND finish.name = 'D'
FOREACH ( r IN relationships(p) | SET r.marked = true )
结果

(空结果)

行数:0
已设置属性:3

从名称标签列表创建新节点

此查询为列表中的每个标签创建一个新节点。

查询
WITH ['E', 'F', 'G'] AS names
FOREACH ( value IN names | CREATE (:Person {name: value}) )
结果

(空结果)

行数:0
创建的节点数:3