#datastax #gremlin #datastax-enterprise #tinkerpop #datastax-enterprise-graph
#datastax #gremlin #datastax-enterprise #tinkerpop #datastax-enterprise-graph
Вопрос:
как добавить ребро и удалить ребро с тем же типом вершины в одном запросе gremlin.
допустим, у нас есть два типа вершин: A -is-> B теперь у меня есть вершина, которая соединена с какой-либо другой вершиной B.
Я хочу обновить вершину A до некоторой другой вершины B.
в настоящее время я удаляю текущую вершину B, а затем добавляю новую вершину .
Ответ №1:
Вы можете сделать это за один обход, используя sideEffect()
:
gremlin> g.V().has('person','name','marko').as('m').
......1> outE('knows').
......2> filter(inV().has('person','name','vadas')).
......3> sideEffect(drop()).
......4> V().has('person','name','peter').
......5> addE('knows').from('m')
==>e[13][1-knows->6]
В строке 1 мы в основном определяем ребро, от которого хотим избавиться (т. Е. ребро «knows» от «marko» до «vadas»), и drop()
это мы делаем в строке 3. В строке 4 мы ищем вершину, к которой мы хотим сейчас подключить «marko», а затем добавляем ребро в строке 5.
Комментарии:
1. Привет, @Stephen, есть идеи, как это можно сделать в gremlin-scala. sideeffect работает не так, как ожидалось в gremlin-scala
2. я не могу использовать SideEffect, как ожидалось.например(businessVertex).as(«a»).outE() .и( .label.is (Метки ребер. IS_LABEL), _.inV().hasLabel(VertexLabels. TRIPTYPE_LABEL)).SideEffect(_=>_ .drop()).iterate() . .. ошибка не устраняется
3. [Исключение InvalidQueryException: не удалось прочитать обход из отправленного запроса. Причина: не удалось найти метод: DefaultGraphTraversal.SideEffect([{}])]
4. почему вас
sideEffect()
вызывают таким образом (т. Е. с помощью того, что я считаю лямбдой)? должно быть так, как у меня естьsideEffect(_.drop())
5. Без этого он не работает. Это приводит к проблемам с компиляцией.