Гремлин: Что делать, если мой запрос не может начинаться с V() или E()?
Первый запрос, выполненный в моем проекте, выполняется в потенциально пустой базе данных и создает несколько вершин, если они еще не созданы, поэтому мой запрос не может начинаться с 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))
)
Есть ли способ написать это элегантно без чего-либо, что выглядит взломанным?
1 ответ
Этот сценарий может быть обработан с помощью шаблона upsert через fold()/unfold()
шаблон описан здесь. Это будет выглядеть как код ниже:
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))