在Cosmos Gremlin中克隆边缘和目标顶点

时间:2019-06-17 00:06:16

标签: azure-cosmosdb gremlin

g.AddV('test').property('id','1').property('name','test 1')
g.AddV('test').property('id','2').property('name','test 2')

g.V('1').AddE('owns').to(g.AddV('another').property('id','3'))

有什么方法可以克隆此owns边,并将其another的目标test 1顶点(具有所有属性)克隆到test 2顶点吗?这只是一个示例数据。我的顶点至少具有10个属性。

注意:查询需要支持cosmos db gremlin api

2 个答案:

答案 0 :(得分:1)

这个问题的答案主要在另一个StackOverflow问题中提出,该问题说明了如何clone a vertex and all it's edges。由于这个问题略有不同,因此我认为我会对其稍作调整,而不是建议将其重复。

gremlin> g.V().has('test','name','test 1').as('t1').
......1>   outE('owns').as('e').inV().as('source').
......2>   V().has('test','name','test 2').as('target').
......3>   sideEffect(       
......4>     select('source').properties().as('p').
......5>     select('target').
......6>       property(select('p').key(), select('p').value())).
......7>   sideEffect(
......8>     select('t1').
......9>     addE(select('e').label()).as('eclone').
.....10>       to(select('target')).
.....11>     select('e').properties().as('p').                        
.....12>     select('eclone').
.....13>       property(select('p').key(), select('p').value()))
==>v[3]
gremlin> g.E()
==>e[8][0-owns->6]
==>e[10][0-owns->3]
gremlin> g.V().valueMap(true)
==>[id:0,label:test,name:[test 1],id:[1]]
==>[id:3,label:test,name:[test 2],id:[3]]
==>[id:6,label:another,id:[3]]

请注意,由于标签是不可变的,因此按照您布置示例数据的方式,您将顶点标签固定为“另一个”。另外,我知道这只是示例数据,但请注意,重载“ id”不是一个好选择,因为它可能导致与T.id混淆。

答案 1 :(得分:0)

执行api:g.V().has('name','test 1').id()

enter image description here

然后尝试在java code中循环结果并执行add edge api:

g.V(<the id of vertex loop>).AddE('owns').to(<the id of vertex 'test2'>)

如果测试2的顶点为多个,则可以进行二维循环。