如何在gremlin中为空遍历添加默认值?

时间:2019-01-31 13:22:34

标签: gremlin

我正在研究一个gremlin查询,该查询沿多个边缘导航并最终产生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 :(得分:2)

您可能可以通过某种方式使用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()步骤。