Как добавить значение по умолчанию для пустых обходов в gremlin? - PullRequest
0 голосов
/ 31 января 2019

Я работаю над запросом гремлина, который перемещается по нескольким краям и в итоге выдает String.В зависимости от содержимого графика этот обход может быть пустым.В случае, если обход заканчивается пустым, я хочу вместо этого вернуть значение по умолчанию.

Вот что я сейчас делаю:

    GraphTraversal<?, ?> traversal = g.traversal().V().

        // ... fairly complex navigation here...

        // eventually, we arrive at the target vertex and use its name
        .values("name")

        // as we don't know if the target vertex is present, lets add a default
        .union(
             identity(),  // if we found something we want to keep it
             constant("") // empty string is our default
        )
        // to make sure that we do not use the default if we have a value...
        .order().by(s -> ((String)s).length(), Order.decr)
        .limit(1)

Этот запрос работает , но это довольно запутанно - все, что я хочу, это по умолчанию, если обход заканчивается тем, что ничего не находит.

У кого-нибудь есть лучшее предложение?Мое единственное ограничение заключается в том, что это должно быть сделано внутри самого gremlin, то есть результат должен иметь тип GraphTraversal.

1 Ответ

0 голосов
/ 31 января 2019

Вы, вероятно, можете использовать coalesce() в некотором роде:

gremlin> g.V().has('person','name','marko').coalesce(has('person','age',29),constant('nope'))
==>v[1]
gremlin> g.V().has('person','name','marko').coalesce(has('person','age',231),constant('nope'))
==>nope

Если у вас есть более сложная логика для определения, найдено ли что-то или нет, тогда рассмотрите choose() step.

...