列表函数

列表函数返回不同数据实体的列表。

有关处理 LIST 值的更多信息,请参阅

示例图

以下图表用于下方的示例

要重新创建该图,请在空的 Neo4j 数据库中运行以下查询

CREATE
  (alice:Developer {name:'Alice', age: 38, eyes: 'Brown'}),
  (bob:Administrator {name: 'Bob', age: 25, eyes: 'Blue'}),
  (charlie:Administrator {name: 'Charlie', age: 53, eyes: 'Green'}),
  (daniel:Administrator {name: 'Daniel', age: 54, eyes: 'Brown'}),
  (eskil:Designer {name: 'Eskil', age: 41, eyes: 'blue', likedColors: ['Pink', 'Yellow', 'Black']}),
  (alice)-[:KNOWS]->(bob),
  (alice)-[:KNOWS]->(charlie),
  (bob)-[:KNOWS]->(daniel),
  (charlie)-[:KNOWS]->(daniel),
  (bob)-[:MARRIED]->(eskil)

coll.distinct()

详细信息

语法

coll.distinct(list)

描述

返回删除所有重复值后的给定列表。

参数

名称

类型

描述

list

LIST<ANY>

需要去重的列表。

返回

LIST<ANY>

注意事项

coll.distinct(null) 返回 null

保留不同值首次出现的顺序。

示例 1. coll.distinct()
对整数列表进行去重
RETURN coll.distinct([1, 3, 2, 4, 2, 3, 1])

返回一个仅包含唯一值的 LIST<ANY>

结果
coll.distinct([1, 3, 2, 4, 2, 3, 1])

[1, 3, 2, 4]

行:1

对包含 null 在内的混合值列表进行去重
RETURN coll.distinct([1, true, true, null, 'a', false, true, 1, null])

返回一个仅包含唯一值的 LIST<ANY>

结果
coll.distinct([1, true, true, null, 'a', false, true, 1, null])

[1, true, null, 'a', false]

行:1

coll.flatten()

详细信息

语法

coll.flatten(list [, depth])

描述

返回展平至给定嵌套深度的列表。

参数

名称

类型

描述

list

LIST<ANY>

需要展平的嵌套列表。

depth

INTEGER(整数)

展平的最大深度(默认值:1)。

返回

LIST<ANY>

注意事项

保留非列表项的原始顺序。

如果 depth 为 0,则返回原始输入列表。

depth 必须是非负整数。

coll.flatten(null) 返回 null

coll.flatten(list, null) 返回 null

coll.flatten(null, depth) 返回 null

coll.flatten(null, null) 返回 null

示例 2. coll.flatten()
将嵌套列表展平至第 2 层
RETURN coll.flatten(['a', ['b', ['c']]], 2)

返回一个 LIST<ANY>,其中嵌套深度在 2 以内的内部列表被展平。

结果
coll.flatten(['a', ['b', ['c']]], 2)

['a', 'b', 'c']

行:1

将列表展平至默认深度 1
RETURN coll.flatten(['a', ['b', ['c']]])

返回一个 LIST<ANY>,其中嵌套深度在 1(默认深度)以内的内部列表被展平。

结果
coll.flatten(['a', ['b', ['c']]])

['a', 'b', ['c']]

行:1

coll.indexOf()

详细信息

语法

coll.indexOf(list, value)

描述

返回给定列表中第一个匹配值的索引;如果不存在该值,则返回 -1。

参数

名称

类型

描述

list

LIST<ANY>

要搜索的列表。

ANY

要搜索的值。

返回

INTEGER(整数)

注意事项

索引从 0 开始。

如果列表中不存在该值,则返回 -1。

coll.indexOf(null, null) 返回 null

coll.indexOf(null, value) 返回 null

coll.indexOf(list, null) 返回 null

示例 3. coll.indexOf()
查找给定值的第一个索引
RETURN coll.indexOf(['a', 'b', 'c', 'c'], 'c')

表示列表中项目索引的 INTEGER

结果
coll.indexOf(['a', 'b', 'c', 'c'], 'c')

2

行:1

搜索给定列表中不存在的值
RETURN coll.indexOf([1, 'b', false], 4.3)

表示未找到值的 INTEGER -1。

结果
coll.indexOf([1, 'b', false], 4.3)

-1

行:1

coll.insert()

详细信息

语法

coll.insert(list, index, value)

描述

返回一个在给定索引处插入了给定值的列表。

参数

名称

类型

描述

list

LIST<ANY>

要添加到的列表。

index

INTEGER(整数)

要添加给定值的索引。

ANY

要添加到列表中的值。

返回

LIST<ANY>

注意事项

索引从 0 开始。

coll.insert(null, null, value) 返回 null

coll.insert(list, null, value) 返回 null

coll.insert(null, 1, value) 返回 null

如果给定的 index 为负数或大于给定列表的大小,则返回错误。

示例 4. coll.insert()
查询
RETURN coll.insert([true, 'a', 1, 5.4], 1, false)

原始列表在给定索引处插入了新值,并将随后的所有值向后移动 1 位。

结果
coll.insert([true, 'a', 1, 5.4], 1, false)

[true, false, 'a', 1, 5.4]

行:1

coll.max()

详细信息

语法

coll.max(list)

描述

返回给定列表中存在的最大值。

参数

名称

类型

描述

list

LIST<ANY>

要搜索的列表。

返回

ANY

注意事项

coll.max(null) 返回 null

coll.max([]) 返回 null

使用 Cypher® 的标准值排序确定最大值;请参阅 值类型的相等性、排序和比较

示例 5. coll.max()
查询
RETURN coll.max([true, 'a', 1, 5.4])

基于 Cypher 排序在给定列表中找到的最大值。

结果
coll.max([true, 'a', 1, 5.4])

5.4

行:1

coll.min()

详细信息

语法

coll.min(list)

描述

返回给定列表中存在的最小值。

参数

名称

类型

描述

list

LIST<ANY>

要搜索的列表。

返回

ANY

注意事项

coll.min(null) 返回 null

coll.min([]) 返回 null

使用 Cypher 的标准值排序确定最小值;请参阅 值类型的相等性、排序和比较

示例 6. coll.min()
查询
RETURN coll.min([true, 'a', 1, 5.4])

基于 Cypher 排序在给定列表中找到的最小值。

结果
coll.min([true, 'a', 1, 5.4])

true

行:1

coll.remove()

详细信息

语法

coll.remove(list, index)

描述

返回一个删除了给定索引处值的列表。

参数

名称

类型

描述

list

LIST<ANY>

要从中删除值的列表。

index

INTEGER(整数)

要删除的值的索引。

返回

LIST<ANY>

注意事项

索引从 0 开始。

coll.remove(null, null) 返回 null

coll.remove(null, index) 返回 null

coll.remove(list, null) 返回 null

如果给定的 index 为负数或大于给定列表的大小,则返回错误。

示例 7. coll.remove()
查询
RETURN coll.remove([true, 'a', 1, 5.4], 1)

原始列表删除了给定索引处的值,并将随后的所有值向前移动 1 位。

结果
coll.remove([true, 'a', 1, 5.4], 1)

[true, 1, 5.4]

行:1

coll.sort()

详细信息

语法

coll.sort(list)

描述

返回排序后的列表。

参数

名称

类型

描述

list

LIST<ANY>

要排序的列表。

返回

LIST<ANY>

注意事项

排序遵循 Cypher 的标准值排序;请参阅 值类型的相等性、排序和比较

coll.sort(null) 返回 null

示例 8. coll.sort()
查询
RETURN coll.sort([true, 'a', 1, 2])

使用 Cypher 的排序规则按升序排列的列表。

结果
coll.sort([true, 'a', 1, 2])

['a', true, 1, 2]

行:1

keys()

详细信息

语法

keys(input)

描述

返回一个 LIST<STRING>,其中包含 NODERELATIONSHIPMAP 的所有属性名称的 STRING 表示形式。

参数

名称

类型

描述

input

NODE | RELATIONSHIP | MAP

将返回其所有属性名称的节点或关系。

返回

LIST<STRING>

注意事项

keys(null) 返回 null

示例 9. keys()
查询
MATCH (a) WHERE a.name = 'Alice'
RETURN keys(a)

返回一个 LIST<STRING>,包含绑定到 a 的节点上的所有属性名称。

结果
keys(a)

["eyes", "name", "age"]

行:1

labels()

详细信息

语法

labels(input)

描述

返回一个 LIST<STRING>,其中包含 NODE 的所有标签的 STRING 表示形式。

参数

名称

类型

描述

input

NODE

将返回其标签的节点。

返回

LIST<STRING>

注意事项

labels(null) 返回 null

使用 labels() 函数时,返回标签的顺序不保证固定。

示例 10. labels()
查询
MATCH (a) WHERE a.name = 'Alice'
RETURN labels(a)

返回一个 LIST<STRING>,包含绑定到 a 的节点的所有标签。

结果
labels(a)

["Developer"]

行:1

nodes()

详细信息

语法

nodes(input)

描述

返回一个 LIST<NODE>,其中包含 PATH 中的所有 NODE 值。

参数

名称

类型

描述

input

PATH

将返回其节点的路径。

返回

LIST<NODE>

注意事项

返回的 LIST 中的 NODE 值保证按照它们在路径遍历中出现的精确顺序排列,从起始节点到结束节点。

nodes(null) 返回 null

示例 11. nodes()
查询
MATCH p = (a)-->(b)-->(c)
WHERE a.name = 'Alice' AND c.name = 'Eskil'
RETURN nodes(p)

返回一个 LIST<NODE>,包含路径 p 中的所有节点。

结果
nodes(p)

[(:Developer {name: "Alice", eyes: "Brown", age: 38}), (:Administrator {name: "Bob", eyes: "Blue", age: 25}), (:Designer {name: "Eskil", likedColors: ["Pink", "Yellow", "Black"], eyes: "blue", age: 41})]

行:1

range()

详细信息

语法

range(start, end [, step])

描述

返回一个 LIST<INTEGER>,包含指定范围内的所有 INTEGER 值,并可选择指定步长。

参数

名称

类型

描述

开始

INTEGER(整数)

范围的起始值。

结束

INTEGER(整数)

范围的结束值。

step

INTEGER(整数)

增量大小(默认值:1)。

返回

LIST<INTEGER>

注意事项

要创建具有递减 INTEGER 值的范围,请使用负数 step

对于非空范围,该范围是包含边界的,因此算术级数将始终包含 start,并根据 startstepend 的值,包含 end。唯一不包含 start 的例外情况是空范围。

如果 step 为负且 start - end 为正(反之亦然),则返回空范围,例如 range(0, 5, -1)

示例 12. range()
查询
RETURN range(0, 10), range(2, 18, 3), range(0, 5, -1)

返回给定范围内的三个数字列表。

结果
range(0, 10) range(2, 18, 3) range(0, 5, -1)

[0,1,2,3,4,5,6,7,8,9,10]

[2,5,8,11,14,17]

[]

行:1

reduce()

详细信息

语法

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

描述

LIST<ANY> 的各个元素运行表达式,并将表达式的结果存储在累加器中。

参数

名称

类型

描述

accumulator

ANY

在遍历 list 时保存结果的变量。从 initial 值开始。

initial

ANY

accumulator 的初始值。

variable

ANY

在遍历期间表示 list 中每个元素的变量。

list

LIST<ANY>

正在遍历的 list

expression

ANY

在每次迭代时更新 accumulator 的表达式。

返回

ANY

注意事项

reduce() 与大多数 Cypher 函数不同,因为它遍历列表,根据表达式逐步更新累加器,而不是从单个评估中返回结果。因此,Cypher 的 reduce() 类比于函数式语言(如 Lisp 和 Scala)中的 foldreduce 方法。

示例 13. reduce()
查询
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 reduction

PATH 中所有 NODE 值的 age 属性求和并作为单个值返回。

结果
reduction

117

行:1

relationships()

详细信息

语法

relationships(input)

描述

返回一个 LIST<RELATIONSHIP>,其中包含 PATH 中的所有 RELATIONSHIP 值。

参数

名称

类型

描述

input

PATH

将返回其所有关系的路径。

返回

LIST<RELATIONSHIP>

注意事项

relationships(null) 返回 null

示例 14. relationships()
查询
MATCH p = (a)-->(b)-->(c)
WHERE a.name = 'Alice' AND c.name = 'Eskil'
RETURN relationships(p)

返回一个 LIST<RELATIONSHIP>,包含 PATH p 中的所有 RELATIONSHIP 值。

结果
relationships(p)

[[:KNOWS], [:MARRIED]]

行:1

reverse()

详细信息

语法

reverse(input)

描述

返回一个 STRINGLIST<ANY>,其中给定 STRINGLIST<ANY> 中的所有字符或元素顺序已被反转。

参数

名称

类型

描述

input

STRING | LIST<ANY>

要反转的字符串或列表。

返回

STRING | LIST<ANY>

注意事项

original 中的任何 null 元素都会被保留。

另请参阅 字符串函数 → reverse()

示例 15. reverse()
查询
WITH [4923,'abc',521, null, 487] AS ids
RETURN reverse(ids)
结果
reverse(ids)

[487,<null>,521,"abc",4923]

行:1

tail()

详细信息

语法

tail(input)

描述

返回 LIST<ANY> 中除第一个元素外的所有元素。

参数

名称

类型

描述

input

LIST<ANY>

将返回除第一个元素外所有元素的列表。

返回

LIST<ANY>

示例 16. tail()
查询
MATCH (a) WHERE a.name = 'Eskil'
RETURN a.likedColors, tail(a.likedColors)

返回名为 likedColors 的属性,以及包含除该属性第一个元素外所有元素的 LIST<ANY>

结果
a.likedColors tail(a.likedColors)

["Pink", "Yellow", "Black"]

["Yellow", "Black"]

行:1

toBooleanList()

详细信息

语法

toBooleanList(input)

描述

将值组成的 LIST<ANY> 转换为 LIST<BOOLEAN>。如果有任何值无法转换为 BOOLEAN,则返回的 LIST<BOOLEAN> 中该位置将为 null。

参数

名称

类型

描述

input

LIST<ANY>

要转换为布尔值列表的值列表。

返回

LIST<BOOLEAN>

注意事项

input 中的任何 null 元素都会被保留。

input 中的任何 BOOLEAN 值都会被保留。

如果 inputnull,则返回 null

如果 input 不是 LIST<ANY>,则返回错误。

input 中每个值的转换均按照 toBooleanOrNull() 函数 进行。

示例 17. toBooleanList()
查询
RETURN toBooleanList(null) as noList,
toBooleanList([null, null]) as nullsInList,
toBooleanList(['a string', true, 'false', null, ['A','B']]) as mixedList
结果
noList nullsInList mixedList

<null>

[<null>,<null>]

[<null>,true,false,<null>,<null>]

行:1

toFloatList()

详细信息

语法

toFloatList(input)

描述

LIST<ANY>VECTOR 转换为 LIST<FLOAT> 值。如果任何值无法转换为 FLOAT,则返回的 LIST<FLOAT> 中对应位置将为 null。

参数

名称

类型

描述

input

VECTOR | LIST<ANY>

要转换为浮点数列表的值列表或向量值。

返回

LIST<FLOAT>

注意事项

input 中的任何 null 元素都会被保留。

input 中的任何 FLOAT 值都会被保留。

如果 inputnull,则返回 null

如果 input 不是 VECTORLIST<ANY>,则返回错误。

从 Neo4j 2025.10 起,input 接受 VECTOR

input 中每个值的转换均按照 toFloatOrNull() 函数 进行。

示例 18. toFloatList()
查询
RETURN toFloatList(null) as noList,
toFloatList([null, null]) as nullsInList,
toFloatList(['a string', 2.5, '3.14159', null, ['A','B']]) as mixedList
结果
noList nullsInList mixedList

<null>

[<null>,<null>]

[<null>,2.5,3.14159,<null>,<null>]

行:1

toIntegerList()

详细信息

语法

toIntegerList(input)

描述

LIST<ANY>VECTOR 转换为 LIST<INTEGER> 值。如果任何值无法转换为 INTEGER,则返回的 LIST<INTEGER> 中对应位置将为 null。

参数

名称

类型

描述

input

VECTOR | LIST<ANY>

要转换为整数列表的值列表或向量值。

返回

LIST<INTEGER>

注意事项

input 中的任何 null 元素都会被保留。

input 中的任何 INTEGER 值都会被保留。

如果 inputnull,则返回 null

如果 input 不是 VECTORLIST<ANY>,则返回错误。

从 Neo4j 2025.10 起,input 接受 VECTOR

list 中每个值的转换均按照 toIntegerOrNull() 函数 进行。

示例 19. toIntegerList()
查询
RETURN toIntegerList(null) as noList,
toIntegerList([null, null]) as nullsInList,
toIntegerList(['a string', 2, '5', null, ['A','B']]) as mixedList
结果
noList nullsInList mixedList

<null>

[<null>,<null>]

[<null>,2,5,<null>,<null>]

行:1

toStringList()

详细信息

语法

toStringList(input)

描述

LIST<ANY> 转换为 LIST<STRING> 值。如果任何值无法转换为 STRING,则返回的 LIST<STRING> 中对应位置将为 null。

参数

名称

类型

描述

input

LIST<ANY>

要转换为字符串列表的值列表。

返回

LIST<STRING>

注意事项

input 中的任何 null 元素都会被保留。

input 中的任何 STRING 值都会被保留。

如果 inputnull,则返回 null

如果 input 不是 LIST<ANY>,则返回错误。

input 中每个值的转换均按照 toStringOrNull() 函数 进行。

示例 20. toStringList()
查询
RETURN toStringList(null) as noList,
toStringList([null, null]) as nullsInList,
toStringList(['already a string', 2, date({year:1955, month:11, day:5}), null, ['A','B']]) as mixedList
结果
noList nullsInList mixedList

<null>

[<null>,<null>]

["already a string","2","1955-11-05",<null>,<null>]

行:1