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

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

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

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

使用虚拟节点

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

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

表 1. 函数
限定名称 类型

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

函数

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

函数

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)的数据可视化为图,而无需存储它。

  • 投影部分数据。

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