Gremlin-更新或插入多个顶点
我正在尝试以下gremlin查询来替换现有顶点,如果它们存在,但行Gremlin-更新或插入多个顶点,gremlin,tinkerpop,gremlin-server,Gremlin,Tinkerpop,Gremlin Server,我正在尝试以下gremlin查询来替换现有顶点,如果它们存在,但行V(\uuuu.select('id'))。drop()一直失败,因为\uuuuu.select('id')不返回该行上的id vertices = [ {"id":1, "label": "person", "first_name":"bob","age":25,"height": 177}, {"id":2, "label": "person", "first_name":"joe","surname":"bl
V(\uuuu.select('id'))。drop()
一直失败,因为\uuuuu.select('id')
不返回该行上的id
vertices = [
{"id":1, "label": "person", "first_name":"bob","age":25,"height": 177},
{"id":2, "label": "person", "first_name":"joe","surname":"bloggs", "age": 32}
]
graph_traversal.inject(vertices).unfold().as_('entity'). \
V(__.select('id')).drop(). \
addV(__.select('label')).property(T.id, __.select('id')).as_('vertex'). \
sideEffect(__.select('entity').unfold().as_('kv').select('vertex'). \
property(
__.select('kv').by(Column.keys),
__.select('kv').by(Column.values)
)
)
这里有一种方法,但它要求您对
映射的列表数据进行一些前端处理,以提取“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()
将丢弃的顶点遍历器流减少为单个遍历器(即,这些顶点的列表
),然后让我们用单个“数据”实例替换它,以使用映射
创建顶点
的常见方式进行迭代。请注意,我添加了一个where()
来忽略“id”和“label”键,因为我认为您不希望这些值作为顶点属性复制到中 这里有一种方法,但它要求您对映射数据的列表进行一些前端处理,以提取“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()
将丢弃的顶点遍历器流减少为单个遍历器(即,这些顶点的列表
),然后让我们用单个“数据”实例替换它,以使用映射
创建顶点
的常见方式进行迭代。请注意,我添加了一个where()
来忽略“id”和“label”键,因为我认为您不希望这些值作为顶点属性复制到中