SetAgg¶
SetAgg 聚合值变量(SetAgg<T>)将所有类型为T的输入聚合为不包含重复值的集合。如需聚合包含重复值的列表,请参见 ListAgg。
声明语法¶
- set_agg_declaration
set_agg_declaration ::=
'NODE'? 'VALUE' aggregator_value_variable 'SetAgg' '<' ('INT8'|'INT16'|'INT32'|'INT64'|'FLOAT'|'DOUBLE'|'STRING') '>'
关于声明语法中参数的详细信息,请参见参数。
初始值¶
从声明语法中可见,声明时不能指定初始值。
输入类型与支持的操作¶
输入类型必须为声明时指定的类型T。
支持赋值与聚合操作。
返回类型¶
SetAgg<T> -> LIST<T>
返回类型为列表LIST<T>,其中每个元素唯一且类型与声明时指定的类型T相同。
成员函数¶
本节介绍 SetAgg 聚合值变量支持的成员函数。
size()¶
返回 SetAgg 聚合值变量中集合的元素数量。
函数签名¶
size() -> UINT64
clear()¶
移除 SetAgg 聚合值变量中集合的所有元素。
函数签名¶
clear() -> VOID
contains_key()¶
若指定的值在 SetAgg 聚合值变量的集合中存在,则返回true,否则返回false。
函数签名¶
contains_key(value: T) -> BOOL
示例¶
以下示例基于 CREATE TEMPORARY GRAPH 中创建的临时图#movie_temporary_graph。
全局 SetAgg 聚合值变量¶
'''
USE #movie_temporary_graph {
VALUE global_set_1 SetAgg<INT>
VALUE global_set_2 SetAgg<INT>
SET @global_set_1 += 3 // set: {3}
SET @global_set_1 += 7 // set: {3, 7}
SET @global_set_1 += 3 // set: {3, 7} (忽略重复值)
SET @global_set_1 += 5 // set: {3, 7, 5}
LOG_INFO("@global_set_1: ", @global_set_1)
// 用空列表进行赋值
SET @global_set_1 = [] // 清空集合
LOG_INFO("Set from empty LIST:", @global_set_1) // 输出:[]
// 用列表进行赋值
SET @global_set_1 = [1, 2, 2, 3, 1, 4] // set: {1, 2, 3, 4}
LOG_INFO("Set from LIST assignment: ", @global_set_1)
SET @global_set_2 += 3 // global_set_2: {3}
SET @global_set_2 += 4 // global_set_2: {3,4}
LOG_INFO("@global_set_2: ", @global_set_2)
// 用另一个 SetAgg 进行赋值
SET @global_set_1 = @global_set_2 // global_set_1: {3,4}
LOG_INFO("After assignment from set_2: ", @global_set_1)
// 用另一个 SetAgg 进行聚合
SET @global_set_1 += @global_set_2 // global_set_1: {3,4}
LOG_INFO("After aggregation from set_2: ", @global_set_1)
// 成员函数
SET @global_set_2.clear() // 清空集合
LOG_INFO("Clear the set: ", @global_set_2) // 输出:[]
LOG_INFO("Size: ", @global_set_1.size()) // 输出:4
LOG_INFO("Contains 4: ", @global_set_1.contains_key(4)) // 输出:true
LOG_INFO("Contains 100: ", @global_set_1.contains_key(100)) // 输出:false
}
'''
返回:
Log:
2025-08-21T02:18:53.175811 INFO - @global_set_1: [5,7,3]
2025-08-21T02:18:53.176426 INFO - Set from empty LIST:[]
2025-08-21T02:18:53.176812 INFO - Set from LIST assignment: [4,3,2,1]
2025-08-21T02:18:53.177273 INFO - @global_set_2: [4,3]
2025-08-21T02:18:53.177556 INFO - After assignment from set_2: [3,4]
2025-08-21T02:18:53.177808 INFO - After aggregation from set_2: [3,4]
2025-08-21T02:18:53.178056 INFO - Clear the set: []
2025-08-21T02:18:53.178199 INFO - Size: 2
2025-08-21T02:18:53.178400 INFO - Contains 4: true
2025-08-21T02:18:53.178600 INFO - Contains 100: false
点绑定 SetAgg 聚合值变量¶
'''
USE #movie_temporary_graph {
NODE VALUE node_set SetAgg<DOUBLE>
MATCH (a@User WHERE a.id IN [1,3,4])-[w@Watch]->(b@Movie)
PER PATH {
// 对于每条匹配的路径,将电影 ID 作为值添加到用户的集合中
SET a.@node_set += b.id
}
PER NODE (a) {
LOG_INFO("a.id: ", a.id, " a.@node_set: ", a.@node_set)
}
}
'''
上述示例声明了一个类型为SetAgg<DOUBLE>的点绑定聚合值变量node_set。该变量用于存储每个用户观看的电影的 ID 集合,不包含重复值。
返回:
Log:
2025-08-12T09:05:22.315257 INFO - a.id: 1 a.@node_set: [10,104,11,497,252,601,100,651,473]
2025-08-12T09:05:22.315257 INFO - a.id: 3 a.@node_set: [152,473]
2025-08-12T09:05:22.315257 INFO - a.id: 4 a.@node_set: [346,99,648,144,637,146,671,10,104,11,252,473]