正如我在其他地方提到的,我不是 CosmosDB 专家,但我敢猜测你所问的问题无法用 CosmosDB 完成。您肯定拥有最简单形式的正确语法,因此更复杂的形式以某种方式解决问题的想法似乎不太可能。我想 property(String, Traversal) 目前根本不受支持,这意味着不可能进行就地更新。
您可以测试复杂的表格(例如,select(Traversal,Traversal),如果您愿意的话,您可以自己满意 - 例如,从这个 blog post 演示如何从地图数据更新顶点:
gremlin> m = [name:'marko',age:29,country:'usa']
==>name=marko
==>age=29
==>country=usa
gremlin> g.withSideEffect('properties',m).
......1> addV('person').as('vertex').
......2> sideEffect(select('properties').
......3> unfold().as('kv').
......4> select('vertex').
......5> property(select('kv').by(Column.keys), select('kv').by(Column.values)))
==>v[0]
gremlin> g.V().has('person','name','marko').elementMap()
==>[id:0,label:person,country:usa,name:marko,age:29]
因此,您唯一的办法是查询您希望更新的顶点,然后发送额外的遍历来更新您想要的字段。从结构上讲,这个建议是简单地以Map 形式检索数据,即键的顶点标识符和保存您希望移动的数据的值,然后简单地在返回的映射列表上使用 for 循环来发出按 id/value 查询:
gremlin> g = TinkerFactory.createModern().traversal()
==>graphtraversalsource[tinkergraph[vertices:6 edges:6], standard]
gremlin> data = g.V().has('age')
==>v[1]
==>v[2]
==>v[4]
==>v[6]
gremlin> data = g.V().has('age').project('id','age').by(id).by('age').toList()
==>[id:1,age:29]
==>[id:2,age:27]
==>[id:4,age:32]
==>[id:6,age:35]
gremlin> data.each { g.V(it['id']).property('personAge',it['age']).iterate() };[]
gremlin> g.V().has('personAge').project('id','age').by(id).by('personAge')
==>[id:1,age:29]
==>[id:2,age:27]
==>[id:4,age:32]
==>[id:6,age:35]