|| apoc.neighbors.byhop.count - APOC 核心文档 - Neo4j 文档

apoc.neighbors.byhop.count

详情

语法

apoc.neighbors.byhop.count(node [, relTypes, distance ]) :: (value)

描述

返回在指定距离内通过给定 RELATIONSHIP 类型连接的所有 NODE 值的数量。

输入参数

名称

类型

描述

node

NODE

算法的起始节点。

relTypes

STRING

要遵循的关系类型列表。关系类型使用 APOC 的关系方向模式语法表示;[<]RELATIONSHIP_TYPE1[>]|[<]RELATIONSHIP_TYPE2[>]|…​。默认值为:``。

distance

INTEGER

最大跳数。默认值为:1

返回参数

名称

类型

描述

value

LIST<ANY>

每个不同跳跃距离的邻居数量列表。

使用示例

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

MERGE (mark:Person {name: "Mark"})
MERGE (praveena:Person {name: "Praveena"})
MERGE (joe:Person {name: "Joe"})
MERGE (lju:Person {name: "Lju"})
MERGE (michael:Person {name: "Michael"})
MERGE (emil:Person {name: "Emil"})
MERGE (ryan:Person {name: "Ryan"})

MERGE (ryan)-[:FOLLOWS]->(joe)
MERGE (joe)-[:FOLLOWS]->(mark)
MERGE (mark)-[:FOLLOWS]->(emil)
MERGE (michael)-[:KNOWS]-(emil)
MERGE (michael)-[:KNOWS]-(lju)
MERGE (michael)-[:KNOWS]-(praveena)
MERGE (emil)-[:FOLLOWS]->(joe)
MERGE (praveena)-[:FOLLOWS]->(joe)

此过程计算节点在多个跳跃次数下的邻居。

以下返回 Emil KNOWS 的人数以及与他有 FOLLOWS 关系的人数,最多 3 跳

MATCH (p:Person {name: "Emil"})
CALL apoc.neighbors.byhop.count(p, "KNOWS|<FOLLOWS", 3)
YIELD value
RETURN value
结果
value

[2, 3, 1]

正如预期,级别 1 有 2 个,级别 2 有 3 个,级别 3 有 1 个。

我们甚至可以将该数字列表转换为一个映射,其中键是跳数,值是邻居大小。以下查询展示了如何使用 apoc.map.fromLists 函数实现这一点

MATCH (p:Person {name: "Emil"})
CALL apoc.neighbors.byhop.count(p, "KNOWS|<FOLLOWS", 3)
YIELD value
RETURN apoc.map.fromLists(
         [value in range(1, size(value)) | toString(value)],
         value) AS value
结果
value

{1: 2, 2: 3, 3: 1}

如果我们还想知道哪些节点在我们的邻域中,我们也可以做到。请参阅 apoc.neighbors.byhop

© . This site is unofficial and not affiliated with Neo4j, Inc.