Cypher-запрос для поиска корневого узла графа - PullRequest
1 голос
/ 12 марта 2019

Я пытаюсь найти корень определенного типа узла в базе данных графа.В запросе Gremlin я могу найти количество корневых узлов.

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

Этот запрос возвращает заголовок корневого узла.Как мы можем найти корневой узел типа узла в запросе шифра.

1 Ответ

1 голос
/ 12 марта 2019

Вы можете использовать шаблон в предложении WHERE для поиска узлов без входящих связей.

Если вам нужно учитывать метки узлов, включите это в шаблон:

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

Если вам не нужно ничего знать о соединяющих узлах, и вы хотите убедиться, что вообще нет никаких взаимосвязей, но есть хотя бы один выходящий, вы можете пропустить метку другогоузел, и запрос становится более эффективным, так как информация о типе отношения / степени направления находится на самом узле, поэтому нет необходимости расширять:

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