使用gremlin-javascript,我想执行一个“如果不存在则添加”事务,如下所示:
g.V() .hasLabel('account').has('uid', '1') .fold() .coalesce( g.V().unfold(), g.V().addV('account').property('uid', '1') )
我该如何表达这种疑问呢?
a8jjtwal1#
更明确地说:
const __ = gremlin.process.statics; g.V() .hasLabel('account').has('uid', '1') .fold() .coalesce( __.unfold(), __.addV('account').property('uid', '1') )
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()是以匿名方式调用的,它们只需要从__导入,就像这里讨论的那样。
unfold()
addV()
__
**更新:**从TinkerPop 3.6.0开始,fold()/coalesce()/unfold()模式已经被新的mergeV()和mergeE()步骤所取代,这两个步骤大大简化了Gremlin执行类似upsert的操作。在TinkerPop 3.6.0和更新版本中,您可以编写:
fold()/coalesce()/unfold()
mergeV()
mergeE()
g.mergeV(['uid':'1',(T.label): 'account'])
2条答案
按热度按时间a8jjtwal1#
更明确地说:
c6ubokkw2#
我假设你在其他地方看到过这种模式,也许在Gremlin控制台中演示过。虽然那是Gremlin Groovy,但Gremlin就是Gremlin,与你的编程语言无关。除了一些小的习惯用法差异外,Gremlin的大多数变体彼此完全相同。对于Javascript和你所问的Gremlin的这一特定部分,Gremlin与Groovy没有什么不同:
注意,
unfold()
或addV()
是以匿名方式调用的,它们只需要从__
导入,就像这里讨论的那样。**更新:**从TinkerPop 3.6.0开始,
fold()/coalesce()/unfold()
模式已经被新的mergeV()
和mergeE()
步骤所取代,这两个步骤大大简化了Gremlin执行类似upsert的操作。在TinkerPop 3.6.0和更新版本中,您可以编写: