在有向无环图(DAG)中将节点集合折叠成“n”个节点

时间:2014-10-21 13:46:08

标签: neo4j cypher

我们有一个地理区域和国家/地区的图表,与定向[:PART_OF]关系相关联:

http://console.neo4j.org/?id=ats4i9

enter image description here

让图中有节点的随机子集,特殊情况是所有终端节点的集合(没有后代):

MATCH (endnode:Geography)-[:PART_OF*]->(parent:Geography)
WHERE NOT (:Geography)-[:PART_OF]->(endnode:Geography)
RETURN endnode.name
// ['Ghana','Nigeria','Iran','Russia','Germany','United States', 'Mexico', 'Brazil']

对于n = 1,2,3,..,如何编写将上述集合折叠为精确n个节点的集合的Cypher,其中每个节点是祖先或与初始中的一个或多个节点相同采集。此外,初始集合中的任何节点都不能从折叠集合中的多个节点下降(没有重叠条件)。

例如,如果n=1,则上述初始集合的结果应为World节点。

如果n=2,结果应为['Americas','EMEA']集合。

如果n=4,则结果应为['North America', 'South America & Africa', 'Europe', 'Asia']['Americas', 'Africa', 'Europe', 'Asia']集合。

0 个答案:

没有答案