Gremlin: добавление ребра и удаление ребра в одном запросе gremlin

#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. Без этого он не работает. Это приводит к проблемам с компиляцией.