Я работал с потоковым алгоритмом 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, а затем создать список всех идентификаторов набора, называемый списком набора, из которого я могу вызывать. Вместо этого я получаю сообщение об ошибке в строке сбора.