我在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'))
答案 0 :(得分:0)
由于Gremlin不支持String操作(例如split
,charAt
等),因此唯一的机会就是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
过滤器。