gremlin语言介七:逻辑组合
2020-07-05 本文已影响0人
生饼
0 打开一个新的图库
本节的命令使用的测试数据是tinkerpop官方提供的Modern图库,使用以下命令可以加载tinkerpop modern图库,它包含6个vertex和6条edge
$ ./bin/gremlin.sh
gremlin> graph = TinkerFactory.createModern()
==>tinkergraph[vertices:6 edges:6]
gremlin>
gremlin> g = graph.traversal()
==>graphtraversalsource[tinkergraph[vertices:6 edges:6], standard]
image.png
1 and
and()可以传入一个或多个traversal,输入的对象经过所有的traversal处理后都会输出的时候才会输出到结果流中
1.1 语法
and(Traversal…)
1.2 实例说明
查找存在label为knows的出向edge,且age的值小于30的人
gremlin> g.V().and(outE('knows'),values('age').is(lt(30))).values('name')
==>marko
2 or
与and()对应,可以传入一个或多个traversal,只要有一个traversal有输出,则输出到结果中
2.1 语法
or(Traversal…)
2.2 实例说明
查找存在label为knows的出向edge,或age的值小于30的人
gremlin> g.V().or(outE('knows'),values('age').is(lt(30))).values('name')
==>marko
==>vadas
3 not
参数是一个traversal,改traversal没有输出的对象会输出到结果流中
3.1 语法
not(Traversal)
实例说明
开发软件的个数小于或等于1的人
gremlin> g.V().hasLabel('person').not(out('created').count().is(gt(1))).values('name')
==>marko
==>vadas
==>Peter
4 and or not的嵌套
and()、or()、not()可以嵌套,从而组成更复杂的查询条件
查询开发了软件且age值为29,或32的作者
gremlin> g.V().hasLabel('person').and(outE('created'),or(has('age',29), has('age', 32))).values('name')
==>marko
==>josh
查询开发了软件且age值不是29和32的作者,注意not()要用__.not()的形式,不然GTM引擎不能区分是not step还是not predicate,从而报语法错误
gremlin> g.V().hasLabel('person').and(outE('created'),__.not(or(has('age',29), has('age', 32)))).values('name')
==>Peter