精通Neo4j
上QQ阅读APP看书,第一时间看更新

3.4.3 列表函数

列表(List)函数返回列表中的元素,如路径中的节点等。

List图例如图3-25所示。

图3-25 List图例

3.4.3.1 nodes()

返回一条路径中的所有节点。

语法:nodes(path)

参数:

● path:一条路径。

查询返回了路径p中的所有节点。

查询:

结果:

3.4.3.2 relationships()

返回一条路径中的所有关系。

语法:relationships(path)

参数:

● path:一条路径。

查询:

查询返回了路径p中的所有节点关系。

结果:

3.4.3.3 labels()

以字符串列表的形式返回一个节点的所有标签。

语法:labels(node)

参数:

● node:返回单个节点的任意表达式。

查询:

查询返回了节点n的所有标签。

结果:

3.4.3.4 keys()

以字符串列表的形式返回一个节点、关系或者map的所有属性的名称。

语法:keys(property-container)

参数:

● property-container:一个节点、关系或者字面值的map。

查询:

查询返回了节点a的属性名。

结果:

3.4.3.5 extract()

可以使用extract()从节点或关系列表中返回单个属性或者某个函数的值。它将遍历整个列表,针对列表中的每个元素运行一个表达式,然后以列表的形式返回这些结果。它的工作方式类似于Lisp和Scala等函数式语言中的map方法。

语法:extract(variable IN list | expression)

参数:

● list:返回列表的表达式。

● variable:引用list中元素的变量,它在expression中会用到。

● expression:针对列表中每个元素所运行的表达式,并产生一个结果列表。

查询:

结果将返回路径中所有节点的age属性。

结果:

3.4.3.6 filter()

filter()返回列表中满足断言要求的所有元素。

语法:filter(variable IN list WHERE predicate)

参数:

● list:返回列表的表达式。

● variable:断言中引用列表元素所用到的变量。

● predicate:针对列表中每个元素进行测试的断言。

查询:

结果将返回array属性,及其元素的字符数为3的元素列表。

结果:

3.4.3.7 tail()

tail()返回列表中除了首元素之外的所有元素。

语法:tail(expression)

参数:

● expression:返回某个类型列表的表达式。

查询:

结果将返回array属性及属性中除了第一个之外的所有元素。

结果:

3.4.3.8 range()

range()返回某个范围内的数值。值之间的默认步长为1,范围包含起始边界值。

语法:range(start, end [, step])

参数:

● start:起点数值的表达式。

● end:结束数值的表达式。

● step:数值间隔的步长。

查询:

第一个返回了0~10步长为1的所有值,第二个返回了2~18步长为3的所有值。

结果:

3.4.3.9 reduce()

可以用reduce()对列表中的每个元素执行一个表达式,将表达式结果存入一个累加器。它的工作机制类似Lisp和Scala等函数式语言中的fold或者reduce方法。

语法:reduce(accumulator = initial, variable IN list | expression)

参数:

● accmulator:用于累加每次迭代的部分结果。

● initial:累加器的初始值。

● list:列表。

● variable:引用列表中的每个元素的变量。

● expression:针对列表中每个元素执行的表达式。

查询:

本查询将路径中每个节点的age数值加起来,然后返回一个单值。

结果: