Как использовать несколько хэш-карт в gremlin для генерации динамических свойств c при добавлении вершин - PullRequest
0 голосов
/ 28 апреля 2020

Я хочу создать узлы PARENT - HAS_CHILD -> CHILD в моей базе данных графа с помощью одного обхода gremlin.

Проблема в том, что вершина PARENT, ребро HAS_CHILD и вершина CHILD имеют разные свойства и должны поступать из разных хэш-карт.

Я использую java API для Gremlin.

Я не нашел никакого способа сделать это и был бы признателен за помощь.

Обновление :::

Мне удалось добиться с помощью нескольких карт, таких как:

Map<String, String> map1 = new HashMap<String, String>(); map1.put("a", "1"); map1.put("b", "2"); map1.put("c", "3");

Map<String, String> map2 = new HashMap<String, String>(); map2.put("aa", "11"); map2.put("bb", "22"); map2.put("cc", "33");

g.withSideEffect("map1", map1).withSideEffect("map2", map2) .addV(label).as("vertex1").sideEffect(__.select("map1").unfold().as("kv").select("vertex1").property(__.select("kv").by(Column.keys),
__.select("kv").by(Column.values))) .addV(label).as("vertex2").sideEffect(__.select("map2").unfold().as("kv").select("vertex2").property(__.select("kv").by(Column.keys),__.select("kv").by(Column.values))) .iterate();

Спасибо за помощь.

1 Ответ

0 голосов
/ 28 апреля 2020

Ответ на эту проблему очень похож на другие вопросы об использовании Map свойств для динамического построения вершин и ребер. Эти шаблоны в значительной степени одинаковы и происходят от использования unfold() для деконструкции Map свойств в поток пар и последующего вызова property(k,v) для каждого. Подход описан более подробно в этом блоге . Хотя в этом посте описывается загрузка одной вершины, способность адаптировать этот пример к тому, что вы ищете, основана на понимании базовых c функций управления коллекциями Gremlin.

gremlin> pair = [[name:'marko',age:29,country:'usa'],[name:'stephen',age:33,country:'usa']]
==>[name:marko,age:29,country:usa]
==>[name:stephen,age:33,country:usa]
gremlin> g.withSideEffect('pair',pair).
......1>   addV('person').as('o').
......2>   sideEffect(select('pair').limit(local,1).
......3>              unfold().as('kvo').
......4>              select('o').
......5>              property(select('kvo').by(Column.keys), select('kvo').by(Column.values))).
......6>   addV('person').as('i').
......7>   sideEffect(select('pair').tail(local).
......8>              unfold().as('kvi').
......9>              select('i').
.....10>              property(select('kvi').by(Column.keys), select('kvi').by(Column.values))).
.....11>   addE('knows').
.....12>     from('o').to('i').iterate()
gremlin> g.V().elementMap()
==>[id:0,label:person,country:usa,name:marko,age:29]
==>[id:4,label:person,country:usa,name:stephen,age:33]
gremlin> g.E()
==>e[8][0-knows->4]
...