[英]Gremlin query to override the Vertex
如何編寫可以執行的 gremlin 查詢
或者有沒有其他方法可以使用 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.