首页 > 解决方案 > 用于查找图的根节点的 Cypher 查询

问题描述

我试图在图形数据库中找出特定的节点类型根。在 Gremlin 查询中,我可以找到根节点的计数。

 query = """g.V().hasLabel("A")
    .filter(
        out().hasLabel("A").count().is(gt(1))
        .and()
        .in().hasLabel("A").count().is(eq(0))
    )
    .values("title")"""

上述查询将返回根节点标题。我们如何在 cypher 查询中找到节点类型的根节点。

标签: graphneo4jcyphercqlgremlin-server

解决方案


您可以在 WHERE 子句中使用模式来查找没有传入关系的节点。

如果您必须考虑节点的标签,则将其包含在模式中:

MATCH (root:A)
WHERE NOT (:A)-->(root) AND size((root)-->(:A)) > 1
...

如果您不需要了解连接节点的任何信息,并且您想确保根本没有任何关系进来,但至少有一个出去,您可以省略另一个节点的标签,并且查询变得更加高效,因为关系类型/方向度信息在节点本身,所以不需要展开:

MATCH (root:A)
WHERE NOT ()-->(root) AND size((root)-->()) > 1
...

推荐阅读