我的图表看起来像这样(参见附件截图)。我一直在尝试以下查询,只要根节点只有一个包含关系,并且当它有多个时它不会有效。 (我还不熟悉cyhper语言)。
MATCH (n:Somelabel) WHERE NOT (()-[:BELONGS_TO]->(n:Somelabel)) RETURN n
任何帮助将不胜感激! (我甚至没有试过计算根节点的直接孩子......这将是" 2"根据我的图表)
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);
答案 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 } null
和r
的值。如果你得到非空结果,那么你实际上有外向关系。
m