学习Gremlin - 15.分支

15.分支

15.1、说明

在对图进行遍历分析时,有时需要根据某些条件对当前的对象集合进行不同的操作,也就是if-then-else语法结构。Gremlin中有一类step可以满足这种分支需求,这组step叫做branch step。branch()是这类step的基础,比较抽象,而choose()是典型的branch step。
choose()的基本使用方法有两类:

  • 单独使用,choose(predicate, true-traversal, false-traversal):根据predicate判断,当前对象满足时,继续true-traversal,否则继续false-traversal

  • 与option配合使用,choose(traversal).option(value1, traversal1).option(…)…:根据对象通过traversal的结果决定后续操作,如果结果是value1,则该对象继续traversal1,以此类推

option()不是一种Gremlin step,只是一种辅助语法,可与choose()配合使用

15.2、实例讲解

15.2.1、if-then-elsechoose()语句
// 查找所有的“person”类型的顶点
// 如果“age”属性小于等于20,输出他的朋友的名字
// 如果“age”属性大于20,输出他开发的软件的名字
// choose(condition, true-action, false-action)
g.V().hasLabel('person')
    .choose(values('age').is(lte(20)),
            __.in('knows'),
            __.out('created'))
    .values('name')
15.2.2、option()choose()语句
// 查找所有的“person”类型的顶点
// 如果“age”属性等于0,输出名字
// 如果“age”属性等于28,输出年龄
// 如果“age”属性等于29,输出他开发的软件的名字
// choose(predicate).option().option()...
g.V().hasLabel('person')
    .choose(values('age'))
    .option(0, values('name'))
    .option(28, values('age'))
    .option(29, __.out('created').values('name'))
15.2.3、如果choose(predicate, true-traversal, false-traversal)false-traversal为空或者是identity(),则不满足条件的对象直接通过choose()
// 查找所有顶点,
// 类型为“person”的顶点输出其创建的软件的“name”属性
// 否则输出顶点自身的“name”属性
g.V().choose(
    hasLabel('person'),
    out('created'))
 .values('name')
// 查找所有顶点,
// 类型为“person”的顶点输出其创建的软件的“name”属性
// 否则输出顶点自身的“name”属性
g.V().choose(
    hasLabel('person'), 
    out('created'), 
    identity())
    .values('name')
15.2.4、choose()option()配合使用时,还提供了一个none,不满足其他选项的对象,执行none选项的traversal
// 查找所有类型为“person”的顶点,
// “name”属性为“Zhoney Zhang”的输出其“age”属性
// 否则输出顶点的“name”属性
g.V().hasLabel('person')
    .choose(values('name'))
    .option('Zhoney Zhang', values('age'))
    .option(none, values('name'))
15.2.5、branch()

branch()有三种用法:

  • lambda方式,filter{it.get()…}
  • Traversal方式,filter(Traversal)
  • 特定branch step方式
// 查询所有顶点
// “name”属性值为“HugeGraph”的顶点输出其“lang”属性
// “name”属性值不为“HugeGraph”的顶点输出其“name”属性
// lambda方式
g.V().branch {it.get().value('name')}
.option('HugeGraph', values('lang'))
    .option(none, values('name'))
// 查询所有顶点
// “name”属性值为“HugeGraph”的顶点输出其“lang”属性
// “name”属性值不为“HugeGraph”的顶点输出其“name”属性
// traversal方式
g.V().branch(values('name'))
    .option('HugeGraph', values('lang'))
    .option(none, values('name'))
// 查询所有顶点
// “name”属性值为“HugeGraph”的顶点输出其“lang”属性
// “name”属性值不为“HugeGraph”的顶点输出其“name”属性
// 特定branch step方式
g.V().choose(
    has('name','HugeGraph'),
    values('lang'),
    values('name'))
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值