Итак, мы смотрим на такую модель (используя: LEAD, поскольку вы не указали тип отношения):
(:A)-[:LEAD]->(:B)
(:B)-[:LEAD]->(:B)
(:B)-[:LEAD]->(:C)
Процедуры APOC предлагает лучшее решение дляэтот, но он состоит из двух частей, так как сначала мы находим ближайший узел: C, используя процедуры расширителя пути , а затем повторно сопоставляем, используя это расстояние, чтобы получить полный набор: узлов C, достижимых на этом расстоянии.
Вы также можете использовать apoc.periodic.iterate () , чтобы вы могли пакетировать это, хотя вы можете поэкспериментировать с batchSize.
Я делаю некоторые предположения в этом запросе, так как вы не указали много свойств, которые можно использовать в графике.
CALL apoc.periodic.iterate("MATCH (a:A) RETURN a",
"CALL apoc.path.spanningTree(a, {relationshipFilter:'LEAD>', labelFilter:'/C', limit:1}) YIELD path
WITH a, length(path) as length
CALL apoc.path.subgraphNodes(a, {relationshipFilter:'LEAD>', labelFilter:'/C', maxLevel:length}) YIELD node
WITH a, collect(node.id) as ids
SET a.cIDs = ids",
{batchSize:1000}) YIELD batches, total, errorMessages
RETURN batches, total, errorMessages