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
上一篇下一篇

猜你喜欢

热点阅读