美文网首页
gremlin语言介七:逻辑组合

gremlin语言介七:逻辑组合

作者: 生饼 | 来源:发表于2020-07-05 03:14 被阅读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
    

    相关文章

      网友评论

          本文标题:gremlin语言介七:逻辑组合

          本文链接:https://www.haomeiwen.com/subject/wmemqktx.html