Вот способ приблизиться к этому, но он требует, чтобы вы выполнили небольшую обработку переднего плана для ваших List
из Map
данных, чтобы извлечь значения "id", чтобы они могли быть переданы в g.V()
непосредственно.
gremlin> g = TinkerFactory.createModern().traversal()
==>graphtraversalsource[tinkergraph[vertices:6 edges:6], standard]
gremlin> data = [
......1> ["id":1, "label": "person", "first_name":"bob","age":25,"height": 177],
......2> ["id":2, "label": "person", "first_name":"joe","surname":"bloggs", "age": 32]
......3> ]
==>[id:1,label:person,first_name:bob,age:25,height:177]
==>[id:2,label:person,first_name:joe,surname:bloggs,age:32]
gremlin> g.V(data.collect{it.id}).
......1> sideEffect(drop()).
......2> fold().
......3> constant(data).
......4> unfold().as('properties').
......5> addV(select('label')).property(T.id, select('id')).as('vertex').
......6> sideEffect(select('properties').
......7> unfold().as('kv').
......8> where(select(keys).is(without('id','label'))).
......9> select('vertex').
.....10> property(select('kv').by(keys), select('kv').by(values)))
==>v[1]
==>v[2]
gremlin> g.V(1,2).elementMap()
==>[id:1,label:person,first_name:bob,age:25,height:177]
==>[id:2,label:person,surname:bloggs,first_name:joe,age:32]
Особо следует отметить использование fold()
для уменьшения потока пропущенных пересечений вершин до одного проходчика (т. Е. List
из этих вершин), который затем давайте заменим это на один экземпляр «данных» для итерации обычным способом для использования Map
для создания Vertex
. Обратите внимание, что я добавил where()
, чтобы игнорировать ключи "id" и "label", поскольку я подумал, что вы не хотите, чтобы эти значения дублировались в качестве свойств вершин.