Как узнать количество узлов с определенной меткой в ​​сообществе в сети? - PullRequest
0 голосов
/ 28 января 2019

Я работал с потоковым алгоритмом unionFind для визуализации связанных компонентов базы данных.Я хотел бы вывести таблицу, показывающую все узлы сети, а также количество узлов определенной метки в соответствующем сообществе каждого узла

Например, скажем, у меня есть список сотрудников во всей школеокруг, и я хотел бы определить количество учителей в школе каждого сотрудника (школа, являющаяся связанным компонентом всей сети округа)

Я попытался назначить setID (получаемый от unionFind.stream) для каждогоузел и вызов нескольких операторов сопоставления для уточнения по метке узла.Я также безуспешно пытался использовать оператор FOREACH.

CALL algo.unionFind.stream()
YIELD nodeId, setId 
MATCH(n)
SET n.setId = setId
MATCH setList = collect(setId)
WITH MATCH(n) WHERE n.setId in setList
MATCH p = (n) WHERE n._label = 'Teacher'
RETURN n.setID as component_id, count(p) as number_of_teachers;

Я понимаю, что функция сбора может быть использована здесь неправильно.Я надеюсь сначала назначить установленный идентификатор каждому узлу n, а затем создать список всех установленных идентификаторов, называемых сет-листом, из которого я могу позвонить.Вместо этого я получаю сообщение об ошибке на линии сбора.

1 Ответ

0 голосов
/ 29 января 2019

Вы не показывали свою модель данных, и ваш запрос содержит многочисленные (синтаксические и логические) ошибки.Кроме того, кажется, что ваш заявленный вариант использования может быть решен очень просто.

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

(:Teacher)-[:TEACHES_FOR]->(:District)

При использовании приведенной выше модели данных следующий эффективный запрос будет возвращать каждый District и количество TEACHES_FOR взаимосвязей, которые у него есть (что соответствует количеству учителей вмоя модель данных):

MATCH (district:District)
RETURN district, SIZE(()-[:TEACHES_FOR]->(district)) AS number_of_teachers;

Конструкция SIZE(()-[:TEACHES_FOR]->(district)) использует внутренний счетчик neo4j числа отношений каждого типа, связанных с узлом, и не требует фактического доступа к каким-либо отношениям.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...