Gremlin:有没有一种方法可以根据字符串的索引查找字符?

时间:2019-05-13 15:56:04

标签: orientdb gremlin

我在OrientDB上具有顶点“ office”和属性“ name”。我想按名称查找名称不包含“-”作为字符串第三个字符的办公室。我想这会在gremlin查询中需要一些Java代码。这是我的最佳尝试,但这实际上导致办公室名称的第三个字符确实带有“-”。

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

1 个答案:

答案 0 :(得分:0)

由于Gremlin不支持String操作(例如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过滤器。