Neo4j cypher - 计算根节点的直接子节点

时间:2015-02-10 17:39:13

标签: neo4j cypher graph-databases root-node

尽管我已经阅读了大量文档,但我还是在努力解决问题...我试图找到我的图根节点(或节点,它们可能是几个顶级节点)并计算他们的直接子节点(所有关系都是键入的:BELONGS_TO)

我的图表看起来像这样(参见附件截图)。我一直在尝试以下查询,只要根节点只有一个包含关系,并且当它有多个时它不会有效。 (我还不熟悉cyhper语言)。

MATCH (n:Somelabel) WHERE NOT (()-[:BELONGS_TO]->(n:Somelabel)) RETURN n

任何帮助将不胜感激! (我甚至没有试过计算根节点的直接孩子......这将是" 2"根据我的图表)

enter image description here

cybersam提供了正确的查询

MATCH (n:Somelabel) WHERE NOT (n)-[:BELONGS_TO]->() RETURN n;

MATCH (n:Somelabel)<-[:BELONGS_TO]-(c:Somelabel)
WHERE NOT (n)-[:BELONGS_TO]->() RETURN n, count(c);

1 个答案:

答案 0 :(得分:4)

根据您的图表,看起来您实际上正在寻找“叶子”节点。此查询将搜索没有传出关系的所有Somelabel个节点,并返回每个此类节点以及具有指向该节点的关系的不同节点数的计数。

MATCH (n:Somelabel)
WHERE NOT (n)-[:BELONGS_TO]->()
OPTIONAL MATCH (m)-[:BELONGS_TO]->(n)
RETURN n, COUNT(DISTINCT m);

如果您实际上正在寻找所有“根”节点,那么您的原始查询将起作用。

作为一个完整性检查,如果您认为某个特定节点是“叶子”节点(假设它的id值为123),则此查询应返回{{1 } nullr的值。如果你得到非空结果,那么你实际上有外向关系。

m