簡體   English   中英

Gremlin - 更新或插入多個頂點

[英]Gremlin - Update or insert multiple vertices

我正在嘗試使用以下 gremlin 查詢來替換現有頂點(如果它們存在),但行V(__.select('id')).drop()一直失敗,因為__.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)
       )
   )

這是一種處理方法,但它需要您對Map數據List進行一些前端處理,以提取“id”值,以便它們可以直接傳遞給gV()

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()來將刪除的頂點遍歷器的 stream 減少為單個遍歷器(即這些頂點的List ),然后讓我們用單個“數據”實例替換它以在使用Map創建Vertex的常見方式。 請注意,我添加了where()來忽略“id”和“label”鍵,因為我認為您不希望將這些值作為頂點屬性重復。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM