apoc.neighbors.tohop

详情

语法

apoc.neighbors.tohop(node [, relTypes, distance ]) :: (node)

描述

返回在指定距离内,由给定 RELATIONSHIP 类型连接的所有 NODE 值。NODE 值按行单独返回。

输入参数

名称

类型

描述

node

NODE

算法的起始节点。

relTypes

STRING

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

distance

INTEGER

最大跳数。默认值为:1

返回参数

名称

类型

描述

node

NODE

一个邻居节点。

使用示例

本节示例基于以下示例图谱

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)

apoc.neighbors.tohop 过程计算节点在指定跳数内的邻居。

以下返回 Praveena 在 1 跳内 FOLLOWS 的人

MATCH (p:Person {name: "Praveena"})
CALL apoc.neighbors.tohop(p, "FOLLOWS>", 1)
YIELD node
RETURN node
结果
节点

(:Person {name: "Joe"})

Praveena 唯一关注的人是 Joe,所以只返回了这一个节点。如果我们包含最多 2 跳的人呢?

以下返回 Praveena 在 2 跳内 FOLLOWS 的人

MATCH (p:Person {name: "Praveena"})
CALL apoc.neighbors.tohop(p, "FOLLOWS>", 2)
YIELD node
RETURN node
结果
节点

(:Person {name: "Mark"})

(:Person {name: "Joe"})

现在 Mark 也被返回了。以下图模式描述了 Emil 如何认识不同的人

  • (praveena)-[:FOLLOWS]-(joe)

  • (praveena)-[:FOLLOWS]-(joe)-[:FOLLOWS]→(mark)

如果我们只想要人数统计,可以使用计数变体。

以下返回 Praveena 在 2 跳内 FOLLOWS 的人数

MATCH (p:Person {name: "Praveena"})
CALL apoc.neighbors.tohop.count(p, "FOLLOWS>", 2)
YIELD value
RETURN value
结果

2

如果我们不关心邻居中有哪些节点,而只想要一个计数,我们也可以做到。请参见 apoc.neighbors.tohop.count