2

尽管阅读了很多文档,但我仍在努力解决一个问题......我正在尝试找到我的图形根节点(或节点,它们可能是几个顶级节点)并计算它们的直系子节点(所有关系都输入:BELONGS_TO )

我的图表看起来像这样(参见随附的屏幕截图)。我一直在尝试以下查询,只要根节点只有一个传入关系,它就可以工作,而当它有多个时它不会。(我还不太熟悉 cyhper 语言)。

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

任何帮助将非常感激 !(我什至还没有尝试计算根节点的直接子节点......根据我的图表,这将是“2”)

在此处输入图像描述

Cyber​​​​sam给出了正确的查询

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);
4

1 回答 1

4

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

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

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

作为健全性检查,如果您有一个您认为是“叶”节点的特定节点(假设它的值为 123),则此查询应返回具有值id的单行and 。如果你得到非空结果,那么你实际上有外向关系。nullrm

MATCH (n {id:123})
OPTIONAL MATCH (n)-[r]->(m)
RETURN r, m
于 2015-02-10T17:55:24.983 回答