unwind是cypher提供的一种列表遍历工具,类似于python中的for循环,unwind结合case等语法可以写出许多复杂的查询,尤其是对于路径查询的处理。foreach也是cypher提供的一个列表遍历工具,但是主要用来做增删改。对于这两个的用法,建议结合列表推导一起学习。
一、UNWIND
官方文档对于UNWIND的说明:With UNWIND
, you can transform any list back into individual rows. 注意两点,list和individual rows,说明输入只要是列表就行,输出是每一个元素。用法如下:
可以看到,依次返回了每一个元素。
1、列表去重
WITH [1, 1, 2, 2] AS coll
UNWIND coll AS x
WITH DISTINCT x
RETURN x
2、遍历多个列表
WITH [1, 2] AS a,[3, 4] AS b
UNWIND (a + b) AS x
RETURN x
3、unwind嵌套
WITH [[1, 2],[3, 4], 5] AS nested
UNWIND nested AS x
UNWIND x AS y
RETURN y
4、空列表
UNWIND [] AS x
RETURN x
不返回任何东西,注意不是返回null。
5、路径遍历
match p=(n:Person{name:"p1"})-[*1..5]-(m)
unwind nodes(p) as x
return x
二、FOREACH
foreach是cypher提供的列表更新工具,官方文档说明:The FOREACH
clause is used to update data within a list, whether components of a path, or result of aggregation. 注意两点,update和list。在foreach中,可以执行CREATE
, CREATE UNIQUE
, MERGE
, DELETE
,等更新语法,还可做foreach嵌套。
1、设置路径节点属性
MATCH p =(begin)-[*]->(END )
WHERE begin.name = 'A' AND END .name = 'D'
FOREACH (n IN nodes(p)| SET n.marked = TRUE )