Neo4j最大深度和路径

问题描述 投票:-1回答:1

简单的问题是:如何使用neo4j(2.3.11)密码计算节点的最大深度值和最大深度路径?

我的场景的解释

我有节点标签称为人和关系类型称为监督。

在一个场景中思考:节点1可以监督2,2可以监督3和4,4可以监督5,依此类推。

所以1需要:

  1. 我想制作一个接收id的密码,例如1(personID),作为参数,并返回路径[1,2,4,5 ......]
  2. 另一个返回路径计数的密码。

我尝试了第二种情况下的cypher(neo4j 2.3.11),没有成功:

MATCH (person:Person)-[SUPERVISED*]->()
WITH person, LENGTH(SUPERVISED) AS depth
where person.personID = 'la3486551918237738'
RETURN person, depth;

总部设在this solution

neo4j cypher
1个回答
1
投票

您可以在单个查询中获取最大深度和ID列表:

MATCH path=(person:Person)-[:supervised*]->(x)
WHERE person.personID = 'la3486551918237738' AND NOT EXISTS((x)-[:supervised]->())
WITH person, path
ORDER BY LENGTH(path) DESC
LIMIT 1
RETURN person, [n IN NODES(path) | n.personID] AS ids, LENGTH(path) AS depth

笔记:

  • 我假设supervised是必需的关系类型。请注意,在Cypher模式中使用冒号时必须在关系类型之前,如[:supervised*]
  • NOT EXISTS((x)-[:supervised]->())测试要求找到的路径以叶节点结束。
  • ORDER BY LENGTH(path) DESC LIMIT 1选择了最长的路径。

[UPDATE]

我在your sample data linked to in the comments发现了以下问题:

  1. 没有Relations.csv文件的studentIDs在personID中显示为Nodes.csv。 (由于您表示这只是示例中的疏忽,我只是将其修复为我自己的文件副本。)
  2. 第一个LOAD CSV查询包含一个不需要的OPTIONAL MATCH
  3. 第二个LOAD CSV查询需要csvFile.institution属性,但Relations.csv文件不包含institution标头(它有一个university_name标头)。因此,用csvFile.institution替换csvFile.university_name修复了第二个查询。
© www.soinside.com 2019 - 2024. All rights reserved.