简单的问题是:如何使用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;
基于此解决方案
您可以在单个查询中获取最大深度和 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
选择最长的路径。[更新]
我在评论中链接到的示例数据中发现了以下问题:
Relations.csv
文件的studentID
s 显示为personID
in Nodes.csv
。(由于您指出这只是示例中的一个疏忽,我只是在我自己的文件副本中修复了这个问题。)LOAD CSV
查询包含不需要的OPTIONAL MATCH
.LOAD CSV
查询需要csvFile.institution
属性,但Relations.csv
文件不包含institution
标题(它有一个university_name
标题)。因此,替换csvFile.institution
为csvFile.university_name
修复了第二个查询。本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句