列表是Cypher中的一个重要的复合类型,对列表进行操作的函数主要是生成列表、获取列表对象、抽取特定的列表元素、过滤列表元素和对列表元素进行迭代计算。列表是元素的有序序列,Cypher使用List来表示列表类型,应用于列表的函数有:
- coalesce():返回列表中第一个非NULL的元素
- head():返回列表中的第一个元素
- last():返回列表中的最有一个元素
- size():返回列表中元素的数量
例如,节点的array属性
MATCH (a)
WHERE a.name = 'Eskil'
RETURN a.array, head(a.array), last(a.array), size(a.array)size()和length()函数
- size(string):表示字符串中字符的数量,可以把字符串当作是字符的列表。
- size(list):返回列表中元素的数量。
- size(pattern_expression):也是统计列表中元素的数量,但是不是直接传入列表,而是提供模式表达式(pattern_expression),用于在匹配查询(Match query)中提供一组新的结果,这些结果是路径列表,size()函数用于统计路径列表中元素(即路径)的数量。
- length(path):返回路径的长度,即路径中关系的数量
例如,统计路径列表中的元素数量:
MATCH (a)
WHERE a.name = 'Alice'
RETURN size((a)-->()-->()) AS fof抽取元素构成列表
extract函数的作用是从列表中抽取值,
extract(variable IN list | expression)根据抽取的值组装成一个列表,返回一个列表:
MATCH p =(a)-->(b)-->(c)
WHERE a.name = 'Alice' AND b.name = 'Bob' AND c.name = 'Daniel'
RETURN extract(n IN nodes(p)| n.age) AS extracted过滤列表元素
filter函数用于对列表中的元素进行过滤,
filter(variable IN list WHERE predicate)把过滤后的元素组成一个了表,返回该列表:
MATCH (a)
WHERE a.name = 'Eskil'
RETURN a.array, filter(x IN a.array WHERE size(x)= 3)获得列表
- keys(node):从节点的属性中抽取属性键
- labels(node):节点标签的列表
- nodes(path):从路径中获取所有节点的列表
- relationships(path):从路径中获得所有的关系
MATCH (a)
WHERE a.name = 'Alice'
RETURN labels(a),keys(a)
MATCH p =(a)-->(b)-->(c)
WHERE a.name = 'Alice' AND c.name = 'Eskil'
RETURN nodes(p), relationships(p)序列的生成和倒置
range()函数,用于生成一个有序的序列,reverse()函数把原始列表的元素进行倒置
range(start, end [, step])
reverse(list)迭代计算列表
reduce()函数应用在列表上,对列表中的每个元素e进行迭代计算,在元素e上运行表达式(expression),把当前的结果存储在累加器中,进行迭代计算,并返回最终计算的标量结果:
reduce(accumulator = initial, e IN list | expression)例如,初始的age值是0,对路径p中的所有节点,计算各个节点的age值的和:
MATCH p =(a)-->(b)-->(c)
WHERE a.name = 'Alice' AND b.name = 'Bob' AND c.name = 'Daniel'
RETURN reduce(totalAge = 0, n IN nodes(p)| totalAge + n.age) AS reductionforeach子句
列表和路径是Cypher中的关键概念,foreach子句用于更新数据,例如,对路径中的元素或通过聚合创建的列表执行更新命令。
对路径中匹配的所有节点,添加marked属性,并设置属性值为TRUE
MATCH p =(begin)-[*]->(END )
WHERE begin.name = 'A' AND END .name = 'D'
FOREACH (n IN nodes(p)| SET n.marked = TRUE )
评论列表(0条)