У меня есть этот код, который существенно обновляет свойства, удаляет все старые IsOfType
края и добавляет новые IsOfType
края (если удалить все метод/класс абстракции и сделать его рядный):Почему AddEdgeStep не работает после DropStep ребер в том же обходе с использованием Gremlin?
traversal = g.V("Entity:633471488:519").as("entity");
//update properties
traversal.property("text", "new text");
traversal.property("description", "new description");
//drop typeEdges
traversal.select("entity").outE("IsOfType").drop();
//even that causes the same issue(!): traversal.select("entity").outE("HasInner").drop();
System.out.println("traversal after type edges deletion: " +traversal);
//make new typeEdges
traversal.V("Entity:996942848:518").as("type-0").addE("IsOfType").from("entity").to("type-0");
System.out.println("traversal after type edges addition: " +traversal);
//storage
traversal.select("entity").forEachRemaining({})
Все работает (даже падение существующих границ IsOfType
). Но создание новых краев IsOfType
, похоже, не приводит к появлению новых ребер на графике. Если я прокомментирую падение, то создание работает отлично (!) Это как если бы DropStep
, который до addEdgeStep
происходит в конце. Я даже пытался удалить другой тип ребра, и он вызывает ту же проблему (!). Возможно, неявная обработка транзакций принимает решение о фиксации, когда drop()
происходит, как и в случае с next()
, iterate()
и forEachRemaining()
?? Если это так, то капли и создания не могут произойти в рамках одной и той же транзакции с использованием Fluent API, что делает ее не очень полезной для реальных приложений :(
Вот состояние обходов после удаления и после добавления два IsOfType
края в моем счете (я пытался как Java и Datastax Студия консоли):
traversal after type edges deletion:
[
GraphStep(vertex,[Entity:633471488:519])@[entity],
AddPropertyStep({value=[Entity], key=[atClass]}),
AddPropertyStep({value=[FilmWithSuperCategories aaa], key=[text]}),
AddPropertyStep({value=[dffsdfsd f2313], key=[description]}),
SelectOneStep(entity)@[entity],
VertexStep(OUT,[IsOfType],edge),
DropStep
]
traversal after type edges addition:
[
GraphStep(vertex,[Entity:633471488:519])@[entity],
AddPropertyStep({value=[Entity], key=[atClass]}),
AddPropertyStep({value=[FilmWithSuperCategories aaa], key=[text]}),
AddPropertyStep({value=[dffsdfsd f2313], key=[description]}),
SelectOneStep(entity)@[entity],
VertexStep(OUT,[IsOfType],edge),
DropStep,
GraphStep(vertex,[Entity:996942848:518])@[type-0],
AddEdgeStep({~from=[[SelectOneStep(entity)]], ~to=[[SelectOneStep(type-0)]], label=[IsOfType]}),
GraphStep(vertex,[Entity:1489781376:516])@[type-1],
AddEdgeStep({~from=[[SelectOneStep(entity)]], ~to=[[SelectOneStep(type-1)]], label=[IsOfType]})
]
Редактировать
Из того, что я прочитал здесь (http://tinkerpop.apache.org/docs/current/reference/#drop-step)
Шаг() - step (filter/sideEffect) используется для удаления элемента и свойств из графика (т. Удалить). Это шаг фильтра, потому что обход не дает никаких исходящих объектов.
Объектов не найдено, так что после капли ничего нельзя сделать! поэтому мне любопытно, как я могу сделать несколько капель/дополнений в одной транзакции, используя DSE Graph Fluent API
Спасибо!
вау вы удивительный! почему я не могу найти документацию о моих случаях использования :(- Я думаю, это потому, что gremlin api сейчас стандартизируется –