Я считаю, что вы ищете функцию relationships(path)
. Это одна из функций пути по умолчанию в Cypher. Он возвращает все отношения - это определенный путь , и вы можете объединить его с одним или несколькими Cypher выражениями списка , чтобы получить значения, которые вам нужны из отношений.
Вообще говоря, вы можете сделать что-то вроде:
MATCH p = (n)-[:HAS_PARENT*..8]->()
RETURN [x IN relationships(p) | x.weight] AS weights
Также вам может пригодиться функция reduce
. Например:
...
RETURN reduce(s = 0, x IN relationships(p) | s + x.weight) AS sumWeight
Но вы должны быть осторожны с вашими путями переменной длины запросов и, вероятно, ограничивать их, чтобы получить только интересующие вас пути.
Хорошим советом будет, вероятно, отметить ваш лист и root узлы, чтобы сопоставить только пути от листа до root, а не только промежуточные. Например:
MATCH p = (n)-[:HAS_PARENT*..8]->(root)
WHERE NOT (root)-[:HAS_PARENT]->() AND NOT (n)<-[:HAS_PARENT]-()
...
И, конечно, вы можете объединить эти шифры с другими, чтобы вернуть все, что вам нужно, в одном запросе.
Надеюсь, это поможет. Дайте нам знать, когда вам это удастся.