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

标签 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 类型。

最佳答案

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

关于gremlin - 如何在 gremlin 中为空遍历添加默认值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54461590/

相关文章:

gremlin - 在 Gremlin 中,如何查询一个属性值大于另一个属性值的顶点?

java - 为 gremlin 服务器配置 neo4j

gremlin - gremlin中使用next()步骤时出现错误如何解决?

gremlin - 使用图遍历的一部分的属性作为其他部分的过滤器

java - Gremlin 不区分大小写的搜索

python - 无法使用 gremlinpython 进行查询

gremlin - Tinkerpop/gremlin 合并顶点(和边)

azure-cosmosdb - Gremlin 查询组计数边缘,还返回最大/最近日期以及标识符

Gremlin:计算具有给定标签和属性值的出站边缘

关于 Geo 的 Elasticsearch "Query string"查询?