gremlin-python отбрасывает несколько вершин и ребер в одной транзакции - PullRequest
0 голосов
/ 22 ноября 2018

Мой контекст:

  • gremlin-python
  • AWS Neptune

Мой вопрос:

1) Могу ли я уронитьвершины и ребра рекурсивно в одной транзакции, учитывая, что у меня есть все конкретные идентификаторы вершин и ребер, которые я хочу отбросить?Цель состоит в том, чтобы написать функцию python, которая оценивает каждое ребро и определяет, нужно ли его отбрасывать, и связывает запрос gremlin для его отбрасывания.

Например:

идентификаторы вершин для удаления:

'vertex1', 'vertex2', 'vertex3'

идентификаторы ребер для удаления:

'edge1', 'edge2', 'edge3'

Пример функции python дляцепочка на g будет выглядеть следующим образом:

def chain_drop(g, vertex_id):
    g = g.V(vertex_id).drop()
    return g

Цепной запрос, который я хотел бы выполнить в виде одной транзакции, в идеале должен выглядеть примерно так:

g.E('edge1').drop()
 .V('vertex1').drop()
 .E('edge3').drop()
 .V('vertex3').drop()
 .iterate() # execute all these queries as one transaction

Выше не работает... И кажется, что я не могу .E ('someid') в середине моего запроса gremlin.

Немного не по теме, но моя лучшая попытка (не рекурсивная) будет выглядеть примерно так:

g.E('edge1', 'edge2', 'edge3').as_('edges')
 .V('vertex1', 'vertex2', 'vertex3').as_('vertices')
 .union(__.select('edges'),
        __.select('vertices'))
 .drop()
 .iterate()

Любая помощь высоко ценится!

1 Ответ

0 голосов
/ 22 ноября 2018

Вы не можете делать то, что хотите, точно по двум причинам:

  1. Нет промежуточного обхода E(), поскольку это только начальный шаг.
  2. drop() убивает всех траверсеров, поэтому последующий средний ход V() никогда не будет выполнен.

Однако вы можете выбрать другой подход и просто собрать все свои элементы для удаления изатем затем отбросьте те ... что-то вроде:

g.V(1).aggregate('x').V(2).aggregate('x').select('x').unfold().drop()

Обратите внимание, что при отбрасывании вершин также будут отбрасываться ребра, поэтому, если те ребра, которые вы хотите отбросить, связаны с вершинами, которые вы хотите отбросить, вам не нужноотбросьте их явно.

...