Гремлин: подсчет соединений, игнорируя ребра с параллельным ребром в противоположном направлении. В этом вопросе я хотел бы знать, есть ли способ найти вершины, соединенные в обе стороны от данной вершины. Мы знаем, что функция dedup () позволяет избежать дублирования. Но есть ли способ найти вершины с параллельными ребрами?
Запрос Гремлина для поиска вершин, соединенных в обоих направлениях
Ответы (1)
Поиск вершин с параллельными ребрами - это частный случай обнаружения цикла.
Вы можете найти рецепт определения цикла здесь.
Упрощенная версия кода для вашего случая:
g.V().as('a').
out().simplePath().where(out().as('a')).
path().dedup().by(unfold().
order().by(id).
dedup().fold())
пример: https://gremlify.com/8c
person
noam621
schedule
29.04.2020
Я знаю вершину, из которой мне нужно знать другие вершины с параллельными ребрами. Я попробовал запрос ниже, это нормально, но когда соединения увеличиваются, задержка будет увеличиваться. {. gV (x.id ()). out ('label') .where (__. out ('label'). hasId (x.id ()))} Можете ли вы изменить запрос и немного объяснить развернутую часть, если Я знаю вершину.
- person pridhvi; 29.04.2020
Если вы знаете начальную вершину, вы можете просто выполнить
g.V(x.id()).as('a').out('label').where(out('label').as('a'))
. Обратите внимание, что этот запрос также вернет первую вершину, если она соединена сама с собой.
- person noam621; 29.04.2020
Да, я на это способен. Я также пробовал gV (x.id ()). Out ('label'). Where (out ('label'). HasId (x.id ()), и он работает, но есть ли лучший способ сделать это, если вы можно увидеть, увеличиваются ли исходящие ребра вершины, время, затрачиваемое на этот запрос, будет продолжать увеличиваться.
- person pridhvi; 29.04.2020