Чтобы попрактиковаться и глубоко погрузиться во внутренности Neo4j, я решил реализовать простую хранимую процедуру, чтобы найти наибольшую степень узла.
Я знаю, что она была реализована:
call apoc.stats.degrees(null)
Как ни странно, я получил ошибку:
Нет процедуры с именем apoc.stats.degrees
, зарегистрированной для этого экземпляра базы данных.Убедитесь, что вы правильно написали имя процедуры и что процедура развернута правильно.
в версии 3.2.3
.
Однако я собираюсь реализовать ее самостоятельно ипоймите, где я был не прав: посмотрите на этот фрагмент кода:
@Procedure(name = "com.maxdemarzi.get_max_degree", mode = Mode.DEFAULT)
@Description("CALL com.maxdemarzi.get_max_degree()")
public Stream<LongResult> GetMaxDegree() {
ResourceIterable<Node> allNodes = db.getAllNodes();
int degree = allNodes.stream().max((Node n1, Node n2)-> n1.getDegree() >= n2.getDegree() ? 0 : 1).get().getDegree();
return Stream.of(new LongResult(Long.valueOf(degree)));
}
Он всегда возвращает 0
, несмотря на то, что в моем графе есть узел со степенью 5
.
Каждый совет, который позволяет лучше понять, почему мой код не в порядке, приветствуется!