深入学习Gremlin(9):条件和过滤

更新时间:2023-05-16 18:48:00 阅读: 评论:0

深⼊学习Gremlin(9):条件和过滤
第9期 Gremlin Steps:
where()、filter()
本系列⽂章的Gremlin⽰例均在HugeGraph图数据库上执⾏,环境搭建可参考,本⽂⽰例均以其中的“TinkerPop关系图”为初始数据。
上⼀期:
条件和过滤操作说明
在对图进⾏遍历分析时,经常需要对满⾜⼀定条件的对象进⾏过滤。where()就是⽤来过滤遍历过程中当前阶段的对象。另⼀⽅
⾯,predicate就是过滤时使⽤的判断条件,包括关系运算和区间判断等,只有满⾜判断条件的对象才能通过进⼊下⼀轮或者作为结果。where()常与lect()或者match()配合使⽤,也可以单独使⽤。
以下是predicate的说明:
Predicate Description
eq(object)传⼊的对象等于⽬标object?
neq(object)传⼊的对象不等于⽬标object?
lt(number)传⼊的数字⼩于⽬标number?
lte(number)传⼊的数字⼩于或等于⽬标number?
gt(number)传⼊的数字⼤于⽬标number?
gte(number)传⼊的数字⼤于或等于⽬标number?
inside(low,high)传⼊的数字⼤于low且⼩于high?
outside(low,high)传⼊的数字⼩于low或者⼤于high?
between(low,high)传⼊的数字⼤于等于low且⼩于high?
Predicate Description
within(objects…)传⼊的对象等于⽬标对象列表objects中的任意⼀个?
without(objects…)传⼊的对象不等于⽬标对象列表objects中的任何⼀个?
逻辑运算and()、or()或者not()作⽤于predicate会产⽣⼀个新的predicate,逻辑运算参见
在众多的Gremlin steps中,有⼀⼤类是filter step,通过判断是否满⾜predicate来决定对象能否通过filter step。filter()语句是filter step的基础,较为抽象,⽽更加具体的where()语句就是⼀个典型的filter step。
实例讲解
1. predicate可以通过test()来获得boolean值
对抗自由基
可以⽤test()测试value是否满⾜predicate,以下是⼀些例⼦:
⽰例1:
// (3 == 2)
eq(2).test(3)
⽰例2:
// ('d' == 'a' || 'd' == 'b' || 'd' == 'c')
within('a','b','c').test('d')
⽰例3:
// (3 > 1 && 3 < 4)
inside(1,4).test
(3)
李雨昕
更多逻辑运算细节可参见
⽰例1:
// not()作⽤于neq(),等价于eq()
not(neq(2))
⽰例2:
// and()连接的predicate,是⼀个新的predicate within(1,2,3).and(not(eq(2))).test(3)
⽰例3:
// or()连接的predicate,是⼀个新的predicate inside(1,4).or(eq(5)).test(3)
对你情有独钟
3. where()单独使⽤
where()有三种使⽤⽅式:
where(P)
where(String, P)性开放d市
where(Traversal)
⽰例1:
// 查看“zhoney”的合作伙伴
// where(P)⽅式
g.V('zhoney').as('a')营运资金需求
.out('created').in('created')
.where(neq('a'))
⽰例2:
// 查看“zhoney”的合作伙伴
// where(String, P)⽅式
g.V('zhoney').as('a')
.out('created').in('created').as('b')
.where('a',neq('b'))
怎样细致毛孔
⽰例3:
// “spmallette”开发过不⽌⼀个软件的合作伙伴
// where(Traversal)⽅式
g.V('spmallette').out('created').in('created')
.where(out('created').count().is(gt(1)))
.values('name')
where()可以与by()语句配合使⽤,表⽰⽤by(property)指定的属性进⾏predicate判断,例如下⾯的例⼦⽰例4:
// 查询”被别⼈认识“
// 且认识⾃⼰的⼈的年龄⼤于⾃⼰的年龄的⼈
g.V().as('a')
.out('knows').as('b')
.where('a',gt('b')).by('age')
4. where()与as()+lect()配合使⽤
as()可以为某⼀阶段的对象添加标签,lect()则可以通过标签获取对象。因此as()+lect()可以在某个step处得到历史信息,详细介绍参见第13期。
// 查看“zhoney”的合作伙伴,并将“zhoney”及其合作伙伴的名字以map输出
pp空间
给儿童讲故事// lect().where()⽅式
g.V('zhoney').as('a')
.out('created').in('created').as('b')
.lect('a','b').by('name')
.where('a',neq('b'))
5. where()与match()配合使⽤
match()可以保证满⾜某种模式的对象通过,详细介绍参见第17期。
// 查看“zhoney”的合作伙伴,并将“zhoney”及其合作伙伴的名字以map输出
// match().where()⽅式
g.V('zhoney').match(__.as('a').out('created').as('b'),
__.as('b').in('created').as('c')).
where('a',neq('c'))
.lect('a','c').by('name')

本文发布于:2023-05-16 18:48:00,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/82/657525.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:对象   判断   条件   等于   关系
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图