Neo4j 最大深度和路径

若昂科塔

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

我的场景说明

我有名为person 的节点标签和名为supervised 的关系类型

设想一个场景:一个节点1可以监督22可以监督344可以监督5等等。

所以 1 需要:

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

  2. 另一个返回路径计数的密码。


我在第二种情况下尝试了密码(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 选择最长的路径。

[更新]

在评论中链接到的示例数据中发现了以下问题

  1. 没有Relations.csv文件的studentIDs 显示为personIDin Nodes.csv(由于您指出这只是示例中的一个疏忽,我只是在我自己的文件副本中修复了这个问题。)
  2. 第一个LOAD CSV查询包含不需要的OPTIONAL MATCH.
  3. 第二个LOAD CSV查询需要csvFile.institution属性,但Relations.csv文件不包含institution标题(它有一个university_name标题)。因此,替换csvFile.institutioncsvFile.university_name修复了第二个查询。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章