У меня есть список смежности (родительские / дочерние отношения), смоделированный в neo4j, но подсчет количества узлов под родителем дает неправильный счет.
Здесь используется запрос шифра
MATCH (me:Members)-[:IS_PARENT_OF*]->(child)
WHERE me.membershipID = {membershipID}
RETURN count(child)
Ответ 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
отношения в рассматриваемом подграфе?
Для этого лучше всего сделать обход графа.
Благодаря 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)