4.Has条件过滤
4.1、说明
在众多Gremlin的语句中,有一大类是filter类型,顾名思义,就是对输入的对象进行条件判断,只有满足过滤条件的对象才可以通过filter进入下一步。
has语句是filter类型语句的代表,能够以顶点和边的属性作为过滤条件,决定哪些对象可以通过。has语句包括很多变种:
- hasLabel(labels…): object的label与labels列表中任何一个匹配就可以通过
- hasId(ids…): object的id满足ids列表中的任何一个就可以通过
- has(key, value): 包含属性“key=value”的object通过,作用于顶点或者边
- has(label, key, value): 包含属性“key=value”且label值匹配的object通过,作用于顶点或者边
- has(key, predicate): 包含键为key且对应的value满足predicate的object通过,作用于顶点或者边
- hasKey(keys…): object的属性键包含所有的keys列表成员才能通过,作用于顶点属性
- hasValue(values…): object的属性值包含所有的values列表成员才能通过,作用于顶点属性
- has(key): 包含键为key的属性的object通过,作用于顶点或者边
- hasNot(key): 不包含键为key的属性的object通过,作用于顶点或者边
4.2、实例讲解
在JanusGraph中,按property的值查询之前,应该对property建立索引,否则将无法查到结果并引发异常。
4.2.1、hasLabel(label...),通过label来过滤顶点或边,满足label列表中一个即可通过
// 查询label为"person"的顶点
g.V().hasLabel('person')
// 查询label为"person"或者"software"的顶点
g.V().hasLabel('person', 'software')
4.2.2、hasId(ids…),通过id来过滤顶点或者边,满足id列表中的一个即可通过
// 查询id为"zhoney"的顶点
g.V().hasId('zhoney')
// 查询id为“zhoney”或者“3:HugeGraph”的顶点
g.V().hasId('zhoney', '3:HugeGraph')
4.2.3、has(key, value),通过属性的名字和值来过滤顶点或边
// 查询“addr”属性值为“Beijing”的顶点
g.V().has('addr', 'Beijing')
4.2.4、has(label, key, value),通过label和属性的名字和值过滤顶点和边
// 查询label为“person”且“addr”属性值为“Beijing”的顶点
g.V().has('person', 'addr', 'Beijing')
4.2.5、has(key, predicate),通过对指定属性用条件过滤顶点和边
// 查询“addr”属性值为“Beijing”的顶点
g.V().has('age', gt(20))
4.2.6、hasKey(keys…): properties包含所有的key才能通过
// 查询包含属性“lang”的顶点
g.V().properties().hasKey('lang')
特殊用法:直接将hasKey()作用于顶点,仅后端是Cassandra时支持
// 查询包含属性“age”的顶点
g.V().hasKey('age')
4.2.7、hasValue(values…): properties包含所有的value才能通过
// 查询包含属性值“Beijing”的顶点
g.V().properties().hasValue('Beijing')
特殊用法:直接将hasValue()作用于顶点,仅后端是Cassandra时支持
// 查询包含属性值“Beijing”的顶点
g.V().hasValue('Beijing')
4.2.8、has(key): 有这个属性的通过
// 查询包含属性“age”的顶点
g.V().has('age')
4.2.9、hasNot(key): 没有这个属性的通过
// 查询没有属性“age”的顶点
g.V().hasNot('age')

432

被折叠的 条评论
为什么被折叠?



