ListAgg¶
ListAgg 聚合值变量(ListAgg<T>)将所有类型为T的输入按照插入顺序聚合为一个列表。如需聚合不含重复值的集合,请参见 SetAgg。
声明语法¶
- list_agg_declaration
list_agg_declaration ::=
'NODE'? 'VALUE' aggregator_value_variable 'ListAgg' '<' ('INT8'|'INT16'|'INT32'|'INT64'|'FLOAT'|'DOUBLE'|'STRING'|'LIST' '<' data_type '>' |( 'RECORD' )? '{' ( (field_name data_type) ( ',' (field_name data_type) )* )? '}') '>'
参数¶
以下为 ListAgg 聚合值变量的特有参数。关于声明语法中其他参数的详细信息,请参见参数。
data_type¶
字段所持有值的数据类型。支持的数据类型包括数值、字符串、布尔值、时间和日期、向量、列表、记录、地理空间。更多信息,请参见数据类型。
field_name¶
记录中的字段名称。field_name必须是标识符。有关标识符的更多信息,请参见标识符命名规则。
初始值¶
从声明语法中可见,声明时不能指定初始值。
输入类型与支持的操作¶
输入类型必须为声明时指定的类型T。
支持赋值与聚合操作。
返回类型¶
ListAgg<T> -> LIST<T>
返回类型为列表LIST<T>,其中每个元素的类型与声明时指定的类型T相同。
成员函数¶
本节介绍 ListAgg 聚合值变量支持的成员函数。
size()¶
返回 ListAgg 聚合值变量中列表的元素数量。
函数签名¶
size() -> UINT64
clear()¶
移除 ListAgg 聚合值变量中列表的所有元素。
函数签名¶
clear() -> VOID
示例¶
以下示例基于 CREATE TEMPORARY GRAPH 中创建的临时图#movie_temporary_graph。
全局 ListAgg 聚合值变量¶
'''
USE #movie_temporary_graph {
VALUE global_list_1 ListAgg<INT>
VALUE global_list_2 ListAgg<INT>
SET @global_list_1 += 3 // list: [3]
SET @global_list_1 += 7 // list: [3, 7]
SET @global_list_1 += 5 // list: [3, 7, 5]
LOG_INFO("@global_list_1: ", @global_list_1)
// 用空列表进行赋值
SET @global_list_1 = [] // 清空列表
LOG_INFO("List from empty LIST:", @global_list_1) // 输出: []
// 用列表进行赋值
SET @global_list_1 = [1, 2, 2, 3, 1, 4] // list: [1, 2, 2, 3, 1, 4]
LOG_INFO("List from LIST assignment: ", @global_list_1)
SET @global_list_2 += 3 // global_list_2: [3]
SET @global_list_2 += 4 // global_list_2: [3, 4]
LOG_INFO("@global_list_2: ", @global_list_2)
// 用另一个 ListAgg 进行赋值
SET @global_list_1 = @global_list_2 // global_list_1: [3, 4]
LOG_INFO("After assignment from list_2: ", @global_list_1)
// 用另一个 ListAgg 进行聚合
SET @global_list_1 += @global_list_2 // global_list_1: [3, 4, 3, 4]
LOG_INFO("After aggregation from list_2: ", @global_list_1)
// 成员函数
SET @global_list_2.clear() // 清空列表
LOG_INFO("Clear the list: ", @global_list_2) // 输出:[]
LOG_INFO("Size: ", @global_list_1.size()) // 输出:4
}
'''
返回:
Log:
2025-08-21T02:18:53.175811 INFO - @global_list_1: [3,7,5]
2025-08-21T02:18:53.176426 INFO - List from empty LIST:[]
2025-08-21T02:18:53.176812 INFO - List from LIST assignment: [1,2,2,3,1,4]
2025-08-21T02:18:53.177273 INFO - @global_list_2: [3,4]
2025-08-21T02:18:53.177556 INFO - After assignment from list_2: [3,4]
2025-08-21T02:18:53.177808 INFO - After aggregation from list_2: [3,4,3,4]
2025-08-21T02:18:53.178056 INFO - Clear the list: []
2025-08-21T02:18:53.178199 INFO - Size: 4
点绑定 ListAgg 聚合值变量¶
'''
USE #movie_temporary_graph {
NODE VALUE node_list ListAgg<DOUBLE>
MATCH (a@User WHERE a.id IN [1,3,4])-[w@Watch]->(b@Movie)
PER PATH {
// 对于每条匹配的路径,将电影 ID 作为值添加到用户的列表中
SET a.@node_list += b.id
}
PER NODE (a) {
LOG_INFO("a.id: ", a.id, " a.@node_list: ", a.@node_list)
}
}
'''
上述示例声明了一个类型为ListAgg<DOUBLE>的点绑定聚合值变量node_list。该变量用于存储每个用户观看的电影的 ID 列表。
返回:
Log:
2025-08-21T06:25:50.230307 INFO - a.id: 3 a.@node_list: [473,152]
2025-08-21T06:25:50.230307 INFO - a.id: 1 a.@node_list: [11,651,10,104,601,100,497,252,473]
2025-08-21T06:25:50.230307 INFO - a.id: 4 a.@node_list: [99,648,671,144,146,346,637,11,10,104,252,473]