Azure cosmosdb 用于覆盖顶点的小精灵查询
如何编写gremlin查询哪一个可以Azure cosmosdb 用于覆盖顶点的小精灵查询,azure-cosmosdb,gremlin,Azure Cosmosdb,Gremlin,如何编写gremlin查询哪一个可以 获取现有顶点 删除所有现有属性(显然,id、标签、索引属性等除外) 添加具有值的新属性(主要是字符串) 或者是否有其他方法可以使用gremlin查询覆盖顶点?以TinkerPop modern graph为例: gremlin> g.V().has('person','name','marko').valueMap(true) ==>[id:1,label:person,name:[marko],age:[29]] 假设完全支持Gremlin
或者是否有其他方法可以使用gremlin查询覆盖顶点?以TinkerPop modern graph为例:
gremlin> g.V().has('person','name','marko').valueMap(true)
==>[id:1,label:person,name:[marko],age:[29]]
假设完全支持Gremlin,您可以保留“name”属性(即index属性),删除所有其他属性,并在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()
:
可读性不如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]]
谢谢@stephen mallette,你救了我一天
drop()
step之前,变通方案一直有效。添加drop()
后,它开始抛出gremlin query compilation error.hmm-它们在可以使用drop()
的地方一定有一些限制。至少有sideEffect()
可用。gtk-谢谢
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]]