我也在寻找一种幂等的方式来创建多个顶点并获得结果。 (我使用Cosmos DB的Gremlin API,而使用fold...coalesce...unfold的典型解决方案在链接在一起时不起作用。)
通过一些实验,我想出了这个替代方案,其复杂度随着添加更多顶点而线性增加。 我正在使用inject()
来人为地创建第一次调用coalesce()
的“源”。
g.inject("0")
.coalesce(__.V(['pk1','00']), addV('MyV')
.property('id','00')
.property('partitionKey','pk1')).as('x')
.coalesce(__.V(['pk1','01']), addV('MyV')
.property('id','01')
.property('partitionKey','pk1'))
.as('x')
.coalesce(__.V(['pk1','02']), addV('MyV')
.property('id','02')
.property('partitionKey','pk1'))
.as('x')
.select('x')
对于那些不关心分区键的人,代码看起来是这样的:
g.inject("0")
.coalesce(__.V('00'), addV('MyV').property('id','00')).as('x')
.coalesce(__.V('01'), addV('MyV').property('id','01')).as('x')
.coalesce(__.V('02'), addV('MyV').property('id','02')).as('x')
.select('x')
此外,我们可以通过提供唯一标签(使用
as()
)在同一时间创建新顶点之间的任意数量的边。
g.inject("0")
.coalesce(__.V(['pk2','05']), addV('MyV').property('id','05')
.property('partitionKey','pk2')
.property('ABC','123467890'))
.as('x').as('a')
.coalesce(__.V(['pk2','06']), addV('MyV').property('id','06')
.property('partitionKey','pk2')
.property('ABC','123467890'))
.as('x')
.coalesce(g.E(['pk2','07']), addE('MyE').property('id','07').from('a'))
.as('x')
.select('x')
g.V().addV('vert1').as('a').addV('vert2').as('b').addE('has').from('a').to('b')
对我无效。有任何想法为什么?似乎.as()
是无效的语法。 - cryanbhug.addV('vert1').as_('a').addV('vert2').as_('b').addE('has').from('a').to('b')
。祝编码愉快! - Austin Malpede