【问题标题】:Gremlin: Is there a way to find the character based on the index of a string?Gremlin:有没有办法根据字符串的索引找到字符?
【发布时间】:2019-09-30 15:01:16
【问题描述】:

我在 OrientDB 上有顶点“办公室”和属性“名称”。我想按名称查找办公室,其中名称没有“-”作为字符串的第三个字符。我想这将需要 gremlin 查询中的一些 java 代码。这是我最好的尝试,但它导致办公室名称实际上有一个“-”作为它们的第三个字符。

g.V().hasLabel('office') .where(values('name').map{it.get().charAt(2)}.is(neq('-'))) .project('Office Name') .by(values('name'))

【问题讨论】:

    标签: orientdb gremlin


    【解决方案1】:

    由于 Gremlin 不支持字符串操作(如 splitcharAt 等),您唯一的机会是 lambda。好像你已经想通了,但你的解决方案对我来说太复杂了。您可以使用更简单的东西,例如:

    g.V().hasLabel('office').
      has('name', filter {it.get()[2] != '-'}).
      project('Office Name').
        by('name')
    

    但是,请注意,如果办公室名称少于 3 个字符,此过滤器将引发异常。因此,您最好检查String 是否足够长:

    g.V().hasLabel('office').
      has('name', filter {it.get().length() > 2 && it.get()[2] != '-'}).
      project('Office Name').
        by('name')
    

    ...或者使用 RegEx 模式匹配(这在 Groovy 中非常好用且简单):

    g.V().hasLabel('office').
      has('name', filter {it.get() ==~ /.{2}-.*/}).
      project('Office Name').
        by('name')
    

    您的遍历不起作用的主要原因是charAt 返回一个Character,然后将其与String - 进行比较,因此每个办公室名称都将通过neq 过滤器。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-18
      • 2013-07-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多