跳转至
开发版采用单机部署,无需产品 License 文件。需要多机部署或大规模性能测试? 了解企业版

SetAgg

SetAgg 聚合值变量(SetAgg<T>)将所有类型为T的输入聚合为不包含重复值的集合。如需聚合包含重复值的列表,请参见 ListAgg。

声明语法

set_agg_declaration
NODE VALUE aggregator_value_variable SetAgg < INT8 INT16 INT32 INT64 FLOAT DOUBLE STRING >

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]