如何在neo4j中获取两个连接节点的级别(深度)数

How to get level(depth) number of two connected nodes in neo4j

我正在使用 neo4j 作为图形数据库来将用户的连接详细信息存储到其中。在这里,我想显示一个用户相对于另一个用户在他们的连接(如 Linkedin)中的级别。例如-第一层连接,第二层连接,第三层和第三层以上显示3+。但我不知道如何使用 neo4j 发生这种情况。我搜索了这个但找不到任何解决方案。如果有人知道这个,请帮助我实现这个功能。

会是这样的

// get all persons  (or users)
MATCH (p:Person) 

// create a set of unique combinations , assuring that you do
// not do double work
WITH COLLECT(p) AS personList
UNWIND personList AS personA
UNWIND personList AS personB

WITH personA,personB
WHERE id(personA) < id(personB)

// find the shortest path between any two nodes
MATCH path=shortestPath( (personA)-[:LINKED_TO*]-(personB) )

// return the distance  ( = path length) between the two nodes
RETURN personA.name AS nameA,
       personB.name AS nameB,
       CASE WHEN length(path) > 3 THEN '3+'
            ELSE toString(length(path))
       END AS distance

要找到2个人之间的最短"connection level",只需要得到最短路径并加1:

MATCH path = shortestpath((p1:Person)-[*..]-(p2:Person))
WHERE p1.id = 1 AND p2.id = 2
RETURN LENGTH(path) + 1 AS level

注意:您可能希望在 variable-length relationship 模式上设置一个合理的上限(例如,[*..6])以避免查询花费太长时间或 运行 大型数据库内存不足)。无论如何,您可能应该忽略非常远的连接。