简单的问题是:如何使用neo4j(2.3.11)密码计算节点的最大深度值和最大深度路径?
我有节点标签称为人和关系类型称为监督。
在一个场景中思考:节点1可以监督2,2可以监督3和4,4可以监督5,依此类推。
所以1需要:
我尝试了第二种情况下的cypher(neo4j 2.3.11),没有成功:
MATCH (person:Person)-[SUPERVISED*]->()
WITH person, LENGTH(SUPERVISED) AS depth
where person.personID = 'la3486551918237738'
RETURN person, depth;
总部设在this solution
您可以在单个查询中获取最大深度和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发现了以下问题:
Relations.csv
文件的studentID
s在personID
中显示为Nodes.csv
。 (由于您表示这只是示例中的疏忽,我只是将其修复为我自己的文件副本。)LOAD CSV
查询包含一个不需要的OPTIONAL MATCH
。LOAD CSV
查询需要csvFile.institution
属性,但Relations.csv
文件不包含institution
标头(它有一个university_name
标头)。因此,用csvFile.institution
替换csvFile.university_name
修复了第二个查询。