Подсчет количества узлов в узле с использованием иерархий, смоделированных в neo4j

У меня есть список смежности (родительские / дочерние отношения), смоделированный в neo4j, но подсчет количества узлов под родителем дает неправильный счет.

Здесь используется запрос шифра

MATCH (me:Members)-[:IS_PARENT_OF*]->(child)
WHERE me.membershipID = {membershipID}
RETURN count(child)

1

Решение

Ответ Logisima — отличный ответ и эффективный способ пройтись по подграфу. Причина, по которой вы получаете то, что я предполагаю, состоит в том, что в вашем результате слишком много узлов, потому что вы, скорее всего, дважды учитываете число детей, возвращенных в результате.

Если вы добавите DISTINCT Я думаю, что вы вернете номер, который ожидаете.

MATCH (me:Members)-[:IS_PARENT_OF*]->(child)
WHERE me.membershipID = {membershipID}
RETURN count(DISTINCT child)

Вы могли бы идентифицировать детей, которых учитывают дважды, делая что-то вроде этого

MATCH (me:Members)-[:IS_PARENT_OF*]->(child)
WHERE me.membershipID = {membershipID}
RETURN child, count(*)

Есть ли у вас посторонние IS_PARENT_OF отношения в рассматриваемом подграфе?

0

Другие решения

Для этого лучше всего сделать обход графа.
Благодаря APOC (https://neo4j-contrib.github.io/neo4j-apoc-procedure), это возможно в Cypher.

Этот запрос должен дать вам ожидаемый результат:

MATCH (me:Members { membershipID:$membershipID}) WITH me
CALL apoc.path.subgraphAll(me, {relationshipFilter:'IS_PARENT_OF>', uniqueness: 'NODE_GLOBAL'}) YIELD nodes
RETURN size(nodes)
1

По вопросам рекламы [email protected]