Запрос Gremlin, который я использую для получения списка всех исходящих вершин (с меткой ребра «имеет») из выбранной вершины «P1» до тех пор, пока он не достигнет вершины с определенной меткой «L3», выглядит следующим образом:
g.V().has("id”,”P1”).repeat(out(“has”)).until(hasLabel(“L3”)).path().by("id")
Как и ожидалось, вышеприведенный запрос возвращает мне список всех промежуточных узлов между выбранной вершиной и целевой вершиной с меткой «L3».
Однако при использовании одного и того же запроса (изменение «out» на'in') в противоположном направлении, т. е. чтобы получить список всех входящих вершин из выбранной вершины в целевую вершину с определенной меткой, я сразу получаю ошибку запроса gremlin.
Вот запрос:
g.V().has("id”,”P3”).repeat(in(“has”)).until(hasLabel(“L1”)).path().by("id")
Ошибка выглядит следующим образом:
Failure in submitting query:
Error: Script compile error: Missing ')'
Я не вижу пропущенных скобок в запросе и единственное изменение между запросами на входящие или исходящие вершины, которые я сделалиспользует 'in' вместо 'out'.
В официальной документации tinkerpop (https://tinkerpop.apache.org/docs/3.2.9/reference/#_traversal_strategies_2), в стратегиях обхода я не могу найти ни одного примера с repeatat (in ()), только с повторением (out ()). Существует ли специальный запрос или метод для получения всех входящих вершин из выбранной вершины, пока она не достигнет вершины с определенной меткой?