Как вы написали, это правильный подход:
g.V().has("OtherVertex", "name", "test").as('t').
addV("Vertex").as('v').addE("MyEdge").from('v').to('t')
Я бы просто добавил кое-что относительно вашей первоначальной попытки, которая показала:
g.V().addV("Vertex")
Я думаю, вы просто имели в видудля начала:
g.addV("Vertex")
Если вы пойдете с первым, вы создадите несколько непреднамеренных проблем:
gremlin> g = TinkerGraph.open().traversal()
==>graphtraversalsource[tinkergraph[vertices:0 edges:0], standard]
gremlin> g.V().addV('person')
gremlin> g.V().addV('person')
gremlin> g
==>graphtraversalsource[tinkergraph[vertices:0 edges:0], standard]
Обратите внимание, что для пустого графа ничего не добавляется. Это связано с тем, что V()
не возвращает вершин и, следовательно, в конвейере нет ничего для запуска addV()
. Давайте предположим, что у вас есть некоторые данные:
gremlin> g = TinkerFactory.createModern().traversal()
==>graphtraversalsource[tinkergraph[vertices:6 edges:6], standard]
gremlin> g.V().addV('person')
==>v[13]
==>v[14]
==>v[15]
==>v[16]
==>v[17]
==>v[18]
gremlin> g.V().addV('person')
==>v[19]
==>v[20]
==>v[21]
==>v[22]
==>v[23]
==>v[24]
==>v[25]
==>v[26]
==>v[27]
==>v[28]
==>v[29]
==>v[30]
Теперь, есть еще худшая проблема в том, что мы добавляем одну вершину для каждой существующей вершины, так как V()
теперь возвращает все вершины в графе на каждойвыполнение.
В качестве заключительного замечания, пожалуйста, смотрите этот Рецепт Gremlin о способах выполнения операций типа get-or-create, поскольку это связано с этим условным видом мутации, который вы делаете сейчас.