虚拟节点与关系(图投影)

虚拟节点和关系在图中并不实际存在,它们仅通过查询返回,并可用于表示图投影。

它们可用于可视化地投影数据,例如,将多个关系聚合为一个,或将中间节点折叠为虚拟关系。我们可以将引文图投影为虚拟的作者-作者图或论文-论文图,其中包含它们之间聚合的关系,甚至可以将 Twitter 数据转换为用户-用户提及图。

我们可以组合真实实体和虚拟实体,例如,通过在两个真实节点之间创建虚拟关系,或者从虚拟节点创建到真实节点的虚拟关系。

使用虚拟节点

虚拟节点无法从图中查询,因为它们必须保存在本地查找结构中。这意味着某些内置的 Cypher 函数可能无法工作。例如,在虚拟节点或关系上使用 `/docs/cypher-manual/2025.05/functions/list/#functions-labels[labels()^]` 函数将返回空列表 `[]`。

APOC 提供了便于使用虚拟节点和关系的函数。

表 1. 函数
限定名称 类型

apoc.any.properties
apoc.any.properties(object ANY, keys LIST<STRING>) - 返回给定对象的所有属性。对象可以是虚拟`NODE`、真实`NODE`、虚拟`RELATIONSHIP`、真实`RELATIONSHIP`或`MAP`。

函数

apoc.any.property
apoc.any.property(object ANY, key STRING) - 返回给定对象中指定键的属性。对象可以是虚拟`NODE`、真实`NODE`、虚拟`RELATIONSHIP`、真实`RELATIONSHIP`或`MAP`。

函数

apoc.map.groupBy
apoc.map.groupBy(values LIST<ANY>, key STRING) - 创建一个以给定属性为键的`LIST<ANY>`的`MAP`,包含单个值。

函数

apoc.node.id
apoc.node.id(node NODE) - 返回给定虚拟`NODE`的 ID。

函数

apoc.node.labels
apoc.node.labels(node NODE) - 返回给定虚拟`NODE`的标签。

函数

apoc.rel.endNode apoc.rel.endNode(rel RELATIONSHIP) - 返回给定虚拟`RELATIONSHIP`的结束`NODE`。

函数

apoc.rel.id apoc.rel.id(rel RELATIONSHIP) - 返回给定虚拟`RELATIONSHIP`的 ID。

函数

apoc.rel.startNode apoc.rel.startNode(rel RELATIONSHIP) - 返回给定虚拟`RELATIONSHIP`的起始`NODE`。

函数

apoc.rel.type apoc.rel.type(rel RELATIONSHIP) - 返回给定虚拟`RELATIONSHIP`的类型。

函数

Virtual Nodes and Relationships have negative ids.

虚拟实体还具有以下用例

  • 仅将节点/关系的选定属性返回给可视化(例如,移除大型或敏感属性)。

  • 可视化图算法发现的集群。

  • 将信息聚合到更高的抽象级别。

  • 在较长路径中跳过中间节点。

  • 出于安全原因隐藏属性或中间节点/关系

  • 图分组

  • 将来自其他源(计算、RDBMS、文档数据库、CSV、XML、JSON)的数据可视化为图,甚至无需存储

  • 投影部分数据

有关如何使用这些过程的更多信息,请参阅

© . All rights reserved.