choose和branch说明
在对图进行遍历分析时,有时需要根据某些条件对当前的对象集合进行不同的操作,也就是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()配合使用
相关指令
-
if-then-else型choose()
例子:
// 查找所有的“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’) -
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’)) -
如果choose(predicate, true-traversal, false-traversal)中false-traversal为空或者是identity(),则不满足条件的对象直接通过choose()
-
choose()和option()配合使用时,还提供了一个none,不满足其他选项的对象,执行none选项的traversal
-
branch()
branch()有三种用法:
lambda方式,filter{it.get()…}
Traversal方式,filter(Traversal)
特定branch step方式
demo:
// 查询所有顶点
// “name”属性值为“HugeGraph”的顶点输出其“lang”属性
// “name”属性值不为“HugeGraph”的顶点输出其“name”属性
// lambda方式
g.V().branch {it.get().value(‘name’)}
.option(‘HugeGraph’, values(‘lang’))
.option(none, values(‘name’))
原文链接:https://blog.csdn.net/linlin1989117/article/details/82703743