Gremlin Javascript折叠、合并和展开

8ftvxx2r  于 2023-03-16  发布在  Java
关注(0)|答案(2)|浏览(134)

使用gremlin-javascript,我想执行一个“如果不存在则添加”事务,如下所示:

g.V()
  .hasLabel('account').has('uid', '1')
  .fold()
  .coalesce(
    g.V().unfold(),
    g.V().addV('account').property('uid', '1')
  )

我该如何表达这种疑问呢?

a8jjtwal

a8jjtwal1#

更明确地说:

const __ = gremlin.process.statics;

g.V()
  .hasLabel('account').has('uid', '1')
  .fold()
  .coalesce(
    __.unfold(),
    __.addV('account').property('uid', '1')
  )
c6ubokkw

c6ubokkw2#

我假设你在其他地方看到过这种模式,也许在Gremlin控制台中演示过。虽然那是Gremlin Groovy,但Gremlin就是Gremlin,与你的编程语言无关。除了一些小的习惯用法差异外,Gremlin的大多数变体彼此完全相同。对于Javascript和你所问的Gremlin的这一特定部分,Gremlin与Groovy没有什么不同:

g.V().
  hasLabel('account').has('uid', '1').
  fold().
  coalesce(unfold(),
           addV('account').property('uid', '1'))

注意,unfold()addV()是以匿名方式调用的,它们只需要从__导入,就像这里讨论的那样。

**更新:**从TinkerPop 3.6.0开始,fold()/coalesce()/unfold()模式已经被新的mergeV()mergeE()步骤所取代,这两个步骤大大简化了Gremlin执行类似upsert的操作。在TinkerPop 3.6.0和更新版本中,您可以编写:

g.mergeV(['uid':'1',(T.label): 'account'])

相关问题