apoc.schema.properties.distinct

  • 此过程不建议在多线程中运行,因此并行运行时(Parallel runtime)不支持该过程。有关更多信息,请参阅 Cypher 手册 → 并行运行时

  • 在 APOC 2025.07 版本发布之前,此过程在本地实例上受到限制。若要在旧版本上使用它,必须解除限制。有关详细信息,请参阅 安装 → 加载和解除限制

详细信息

语法

apoc.schema.properties.distinct(label, key) :: (value)

描述

返回给定键的所有不同 NODE 属性值。

输入参数

名称

类型

描述

标签 (label)

STRING

用于查找不同属性值的节点标签。如果设置为空字符串 ``,则会查找所有标签的不同属性值。

键 (key)

STRING

要查找不同值的属性名称。如果设置为空字符串 ``,则会查找指定标签下所有属性名称的不同属性值。

返回参数

名称

类型

描述

LIST<ANY>

给定属性的不同值列表。

使用示例

本节中的示例基于以下示例图

CREATE (:Person {name: "Michael", age: 45});
CREATE (:Person {name: "Ryan", age: 33});
CREATE (:Person {name: "Michael", age: 42});
CREATE (:Dog {name: "Shadow", age: 11});

特定标签和属性名称

CALL apoc.schema.properties.distinct("Person", "name");
结果

["Michael", "Ryan"]

所有标签和特定属性名称

将输入参数 label 设置为 `` 将返回所有标签和指定属性名称的不同属性值。

CALL apoc.schema.properties.distinct("", "name");
结果

["Michael", "Ryan", "Shadow"]

特定标签和所有属性名称

将输入参数 key 设置为 `` 将返回指定标签和所有属性名称的不同属性值。

CALL apoc.schema.properties.distinctCount("Person", "");
结果

["Michael", "Ryan", 45, 33, 42]

所有标签和所有属性名称

将输入参数 labelkey 设置为 `` 将返回所有标签和属性名称的不同属性值。

CALL apoc.schema.properties.distinct("", "");
结果

["Michael", "Ryan", "Shadow", 45, 33, 42, 11]

在 APOC 2025.11 版本中,该过程进行了重大重构,包括多项错误修复。因此,与以前的版本相比,在多种情况下其行为已发生改变。

变更行为
标签和键组合上的索引 属性值 2025.11 之前的行为 2025.11 及之后的行为

无索引

-

在没有任何索引的情况下,该过程将返回空结果。

该过程在有或无索引的情况下都会返回相同的结果,但在无索引的情况下速度可能会变慢。

多种类型的索引

-

根据索引创建的顺序,可能会导致错误。

永远不会导致错误。

非范围索引

混合属性类型

仅包含与索引类型相同的属性值。

所有属性值都将包含在结果中。

范围索引

LIST 类型的相同属性值

每个列表都被视为不同的值,并包含在结果中。

列表被视为相同的值,因此它们在结果中只会显示一次。

范围索引

在同一事务中创建的属性值

不会包含在结果中。

将包含在结果中。

一个或多个范围索引

labelkey 输入参数设置为 ``

仅包含任何索引所覆盖的标签和属性组合。

所有相关的标签和属性组合都将包含在结果中。