Следующий запрос, вероятно, самый простой. Это гарантирует, что последний узел каждого совпавшего пути является листовым узлом, а затем возвращает длину пути. APO C не требуется.
MATCH k = (p:Person)-[:CHILD*0..]->(c)
WHERE NOT (c)-[:CHILD]->()
RETURN p.code, LENGTH(k) AS score
Я предполагаю, что отношение CHILD
всегда указывает на Person
, и поэтому для эффективности я оставляю эту метку вне конечных узлов в запрос выше.
[ОБНОВЛЕНИЕ]
Если вам нужен только путь с максимальной длиной пути, вы можете сделать это:
MATCH k = (p:Person)-[:CHILD*0..]->(c)
WHERE NOT (c)-[:CHILD]->()
RETURN p.code, LENGTH(k) AS score
ORDER BY score DESC LIMIT 1