簡體   English   中英

Gremlin 查詢以覆蓋頂點

[英]Gremlin query to override the Vertex

如何編寫可以執行的 gremlin 查詢

  1. 獲取現有頂點
  2. 刪除所有現有屬性(顯然除了 id、label、index 屬性等)
  3. 添加帶有值的新屬性(主要是僅字符串)

或者有沒有其他方法可以使用 gremlin 查詢覆蓋頂點?

以 TinkerPop 現代圖為例:

gremlin> g.V().has('person','name','marko').valueMap(true)
==>[id:1,label:person,name:[marko],age:[29]]

並假設完全支持 Gremlin,您可以保留“名稱”屬性(即索引屬性)刪除所有其他屬性並在 Gremlin 的一行中添加新屬性,如下所示:

gremlin> g.V().has('person','name','marko').
......1>   sideEffect(properties().not(hasKey('name')).drop()).
......2>   property('age',33).
......3>   property('favoriteColor','red')
==>v[1]
gremlin> g.V().has('person','name','marko').valueMap(true)
==>[id:1,label:person,name:[marko],favoriteColor:[red],age:[33]]

但是在 CosmosDB 中,我認為您還沒有支持sideEffect()步驟。 訣竅在於,要在一次遍歷中執行此操作,您需要以某種方式對drop()產生“副作用”,並且由於drop()充當過濾所有步驟,因此您在它之后添加的任何步驟都不會執行為流中沒有任何東西可以操作。

缺少sideEffect()一些解決方法包括使用union()identity()

gremlin> g.V().has('person','name','marko').
......1>   union(properties().not(hasKey('name')).drop(),
......2>         __.identity()).
......3>   property('age',33).
......4>   property('favoriteColor','red')
==>v[1]
gremlin> g.V().has('person','name','marko').valueMap(true)
==>[id:1,label:person,name:[marko],favoriteColor:[red],age:[33]]

sideEffect()的意圖可讀性差,但有效。 我相信 CosmosDB 支持identity()即使它沒有記錄在他們的網站上。 如果你沒有identity() ,我想你只需要發揮創意 - 這是另一種不太好的方式:

gremlin> g.V().has('person','name','marko').as('a').
......1>   union(properties().not(hasKey('name')).drop(),
......2>         select('a')).
......3>   property('age',33).
......4>   property('favoriteColor','red')
==>v[1]
gremlin> g.V().has('person','name','marko').valueMap(true)
==>[id:1,label:person,name:[marko],favoriteColor:[red],age:[33]]

暫無
暫無

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

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