0

在我的项目上执行的第一个查询在一个可能为空的数据库上运行,如果尚未创建一些顶点,则创建一些顶点,因此我的查询无法开始,V()或者E()因为数据库可能为空,也无法开始,addE()因为首先我需要检查是否没有创建边缘,我找到了以下解决方案,inject()但它看起来像一个黑客:

g.inject("").union(
    coalesce(V().has("question", "questionId", 0), addV("question").property("questionId", 0)),
    coalesce(V().has("question", "questionId", 1), addV("question").property("questionId", 1)),
    coalesce(V().has("question", "questionId", 2), addV("question").property("questionId", 2))
)

有没有办法以一种优雅的方式来写这个而没有任何看起来很老套的东西?

4

1 回答 1

1

这种情况可以通过此处fold()/unfold()描述的模式使用 upsert 模式来处理。这看起来像下面的代码:

g.V().
  has("question", "questionId", 0).
  fold().
  coalesce(unfold(), addV("question").property("questionId", 0)).
  V().
  has("question", "questionId", 1).
  fold().
  coalesce(unfold(), addV("question").property("questionId", 1)).
  V().
  has("question", "questionId", 2).
  fold().
  coalesce(unfold(), addV("question").property("questionId", 2))
于 2020-08-23T20:37:35.167 回答