CYPHER кумулятивный подсчет связанных узлов - PullRequest
1 голос
/ 20 января 2020

У меня есть экземпляр Neo4j, и я использую CYPHER для выполнения следующих действий:

Я хочу создать запрос кумулятивного подсчета. У меня есть следующая структура:

node structure

В идеале я хочу вывод, как это:

  • Компьютер, количество: 3
  • Физические науки, количество: 4 (поскольку в компьютере 3, а в самом узле 1)
  • ..... для всех остальных узлов

В основном фиолетовые узлы должны подсчитывать сини-я sh.

Я сделал простой запрос, который подсчитал бы число для каждого, но как накапливать все результаты.

Мой пример запроса:

MATCH (n:Field) WITH n
OPTIONAL MATCH (p)-[:RELATES_TO {predicate: 'has field'}]->(n) WITH n, p
RETURN n.my_id AS field_id, n.label AS field, COUNT(p) AS num

Помощь приветствуется.

1 Ответ

1 голос
/ 20 января 2020

Обновленный ответ ...

MATCH (n:Field)
OPTIONAL MATCH (n)-[:RELATES_TO*0..2 {predicate: 'has field'}]->(:Field)<-[:RELATES_TO {predicate: 'has field'}]-(p:Blue)
RETURN n.my_id AS field_id, n.label AS field, count(p) AS num

И вы должны определить вторую метку узла, который вы хотите считать (в конце концов, это может быть Field.

И вам нужно сделать градусы отсчитываемыми, но они должны быть ограничены на некоторой глубине, например ..2.

Найти все Field, которые RELATE_TO Blue (составил этот ярлык, я сделал не видеть это в вашем примере) не более двух прыжков и вернуть счетчики для каждого поля.

MATCH (n:Field)-[:RELATES_TO*..2]->(p:Blue)
RETURN n.my_id AS field_id, n.label AS field, count(p) AS num

Или, если вы хотите, чтобы все поля были даже

MATCH (n:Field)
OPTIOANL MATCH (n)-[:RELATES_TO*..2]->(p:Blue)
RETURN n.my_id AS field_id, n.label AS field, count(p) AS num
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...