添加顶点时如何在gremlin中使用多个hashmap生成动态属性
How to use multiple hashmaps in gremlin to generate dynamic properties when adding vertices
我想使用单一 gremlin 遍历在我的图形数据库中创建 PARENT - HAS_CHILD -> CHILD 节点。
问题是 PARENT 顶点、HAS_CHILD 边和 CHILD 顶点具有不同的属性,应该来自不同的 Hashmap。
我正在使用 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();
感谢您的帮助。
这个问题的答案与使用 Map
属性动态构造顶点和边的其他问题非常相似。该模式在很大程度上是相同的,并且源自使用 unfold()
将 Map
属性解构为成对流,然后为每个调用 property(k,v)
。在 Gremlin 的 blog post. While that post describes the loading of a single vertex, the ability to adapt that example to what you're looking for comes from understanding basic collection manipulation functions 中详细描述了该方法。
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]
我想使用单一 gremlin 遍历在我的图形数据库中创建 PARENT - HAS_CHILD -> CHILD 节点。
问题是 PARENT 顶点、HAS_CHILD 边和 CHILD 顶点具有不同的属性,应该来自不同的 Hashmap。
我正在使用 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();
感谢您的帮助。
这个问题的答案与使用 Map
属性动态构造顶点和边的其他问题非常相似。该模式在很大程度上是相同的,并且源自使用 unfold()
将 Map
属性解构为成对流,然后为每个调用 property(k,v)
。在 Gremlin 的 blog post. While that post describes the loading of a single vertex, the ability to adapt that example to what you're looking for comes from understanding basic collection manipulation functions 中详细描述了该方法。
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]