简单的问题是:如何使用neo4j(2.3.11)密码从节点计算最大深度值和最大深度路径?
我的节点标签为 person ,关系类型为 supervised 。
在场景中思考:节点 1 可以监督 2 , 2 可以监督 3 和 4 , 4 可以监督 5 等。
所以有1个需求:
我想制作一个接收ID的密码,例如1(personID)作为参数,并返回路径[1、2、4、5 ....]
和另一个返回路径计数的密码。
在第二种情况下,我尝试使用该密码(neo4j 2.3.11),但未成功:
MATCH (person:Person)-[SUPERVISED*]->()
WITH person, LENGTH(SUPERVISED) AS depth
where person.personID = 'la3486551918237738'
RETURN person, depth;
答案 0 :(得分: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
是必需的关系类型。请注意,在[:supervised*]
中使用Cypher模式时,冒号必须在关系类型之前。NOT EXISTS((x)-[:supervised]->())
测试要求找到的路径以叶节点结尾。ORDER BY LENGTH(path) DESC LIMIT 1
选择最长的路径。[更新]
我在your sample data linked to in the comments中发现了以下问题:
Relations.csv
文件的studentID
中没有一个在personID
中显示为Nodes.csv
。 (由于您表示这只是示例中的一个疏忽,因此我将其固定在自己的文件副本中。)LOAD CSV
查询包含不需要的OPTIONAL MATCH
。LOAD CSV
查询需要csvFile.institution
属性,但是Relations.csv
文件不包含institution
标头(它具有university_name
标头)。因此,将csvFile.institution
替换为csvFile.university_name
可修复第二个查询。