Как удалить несколько ребер в запросе гремлина

Я создал ребро под названием «созданное» между вершиной Пользователь и вершиной Событие.

 user1(8312) ---created---> event1(1234)

 user1(8312) ---created---> event2(4567)

 user1(8312) ---created---> event3(7890)

Я могу удалять по одному ребру за раз, но если я хочу удалить несколько ребер, я должен выполнить цикл и выполнить несколько вызовов db. Есть ли способ удалить сразу несколько ребер.


person mano haran    schedule 24.10.2016    source источник


Ответы (2)


Если вы хотите переместить ребра между несколькими вершинами, вы можете сделать что-то вроде этого:

gremlin> g = TinkerFactory.createModern().traversal()
==>graphtraversalsource[tinkergraph[vertices:6 edges:6], standard]
gremlin> g.V(1).outE()
==>e[9][1-created->3]
==>e[7][1-knows->2]
==>e[8][1-knows->4]
gremlin> g.V(1).outE().where(inV().hasId(within(2,3))).drop()
gremlin> g.V(1).outE()
==>e[8][1-knows->4]

Подробнее об этом можно прочитать в рецептах гремлина.

person stephen mallette    schedule 25.10.2016
comment
Спасибо за ответ. - person mano haran; 26.10.2016

Я не уверен, как вы удаляете ребра, но если вы просто хотите удалить все исходящие созданные ребра из вершины с идентификатором 8312, тогда это должно сработать:

g.V(8312).outE('created').drop().iterate()
person Florian Hockmann    schedule 24.10.2016
comment
Это правильный ответ, хотя стоит отметить, что он все еще проходит через каждое ребро, чтобы отбросить его. Я не знаю ни одной реализации графической базы данных, которая могла бы оптимизировать этот бит Gremlin, чтобы избежать этого. - person stephen mallette; 24.10.2016
comment
Если я выдам E (created) .drop (), все ребра будут отброшены. Я хочу отбросить ребра между двумя конкретными вершинами. - person mano haran; 25.10.2016
comment
Это запрос на удаление ребра между двумя вершинами. - person mano haran; 25.10.2016
comment
g.V (1) .bothE (). where (otherV (). hasId (2)). drop (), но для нескольких вершин. есть ли способ? - person mano haran; 25.10.2016