首页 文章

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

提问于
浏览
2

尽管已经阅读了大量文档,但我正在努力解决问题......我正在尝试找到我的图形根节点(或节点,它们可能是几个顶级节点)并计算它们的直接子节点(所有关系都是键入的: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 回答

  • 4

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

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

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

    作为完整性检查,如果您认为某个特定节点是"leaf"节点(假设它的值为 id 为123),则此查询应返回 rmnull 值的单行 . 如果您获得非空结果,那么您实际上具有传出关系 .

    MATCH (n {id:123})
    OPTIONAL MATCH (n)-[r]->(m)
    RETURN r, m
    

相关问题