Как перебрать вершины в Gremlin и добавить ребро

Я пытаюсь понять, как перебирать вершины внутри контейнера и добавлять ребра между текущей вершиной в цикле и заданной вершиной.

Это то, что у меня есть до сих пор: это дает мне массив всех идентификаторов вершин в данном контейнере:

v=g.V('containerName','MyContainer').outE.inV.id

результат:

{"results":[12,320004,280004,240004,200004,160004,120004,80004,40004],"success":true,"version":"2.4.0","queryTime":35.089565} 

Теперь я хочу перебрать/перебрать все идентификаторы в этом массиве, получить вершину идентификатора и добавить ребро между заданной вершиной и текущей вершиной в цикле.

Кто-нибудь знает, как это можно сделать?


person agiledevpro    schedule 09.12.2014    source источник


Ответы (1)


Вы можете сделать sideEffect, который добавит новые ребра.

С игрушечным тинкером graph:

g = TinkerGraphFactory.createTinkerGraph()

давайте предположим, что вы хотите связать Питера со всеми соседями Марко (только снаружи)

givenVertex = g.V('name','peter').next()
g.V('name','marko').out.sideEffect{g.addEdge(givenVertex,it, 'yourLabel')}

проверить результат:

g.V('name','peter').out.name
==>lop // lop appears twice because edge peter -> lop was present previous to operation
==>lop
==>vadas
==>josh
person Faber    schedule 09.12.2014
comment
Привет, я пытался сделать то, что вы предложили, но когда я посмотрел на результат выполнения g.V('containerName','Acontainer').out.containerName в моем случае, я получил {results:[null,..,null],success: правда, версия: 2.4.0, время запроса: 33.366562} - person agiledevpro; 09.12.2014
comment
Похоже, ребра созданы, я могу проверить результат, выполнив g.V('contaninerName','Acontainer').outE - person agiledevpro; 09.12.2014
comment
Хм может быть проблема с rexster. Я попробовал свое решение только с TinkerGraph. Тем не менее, вы показали в своем вопросе, как получить идентификаторы вершины. Я думаю, вы могли бы перебрать идентификаторы, снова получить вершину и применить sideEffect. g.V('containerName','MyContainer').outE.inV.id должен быть повторяемым. Может быть, попробовать что-то вроде g.V('containerName','MyContainer').outE.inV.id.sieEffect{g.addEdge(g.v(<givenVertexId>).next(), g.v(it).next(), 'yourLabel')} - person Faber; 09.12.2014
comment
Ах, хорошо… просто хотел спросить тебя об этом ;) - person Faber; 09.12.2014
comment
Обратите внимание, что оболочка Gremlin автоматически повторяет все ваши операторы. В Rexster вам нужно явно повторять: g.V('name','marko').out().sideEffect{givenVertex.addEdge('yourLabel', it)}.iterate() - person Daniel Kuppitz; 10.12.2014