FOREACH

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

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

FOREACH 括号内,你可以执行任何更新命令——SETREMOVECREATEMERGEDELETEFOREACH

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

graph foreach clause

标记路径上的所有节点

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

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

(空结果)

行数: 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 )
表 2. 结果

(空结果)

行数: 0
设置的属性: 3

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

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

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

(空结果)

行数: 0
创建的节点: 3