在一个查询中在 Apache TinkerPop Gremlin 中获取或创建 vertex/edge

Get or Create vertex/edge in Apache TinkerPop Gremlin in one query

如何通过一次查询在 Apache TinkerPop Gremlin 中获取或创建 vertex/edge?

目前我在做,

id = None
if g.V().has('employee', 'name', 'thirumal').hasNext():
  id = g.V().has('employee', 'name', 'thirumal').values('id')
else:
  id = uuid4()
  g.addV('employee').property(T.id, id).property('name', 'Thirumal').iterate()
logging.debug("Id is {}".format(id))

目前推荐在 Gremlin 中执行此操作的方法是使用 fold/coalesce/unfold 模式。在你的例子中,它变成了这样的:

g.V().has('employee', 'name', 'thirumal').fold().
  coalesce(unfold(),
           addV('employee').property(T.id, id).property('name', 'Thirumal')).
  id().next()

在 Apache TinkerPop 社区中,我们正在考虑添加更多的方式来更加声明地执行这种更新插入,但目前,这是推荐使用的模式。

更多人讨论了此查询模式 here and here