逻辑运算
Gremlin支持在遍历器上加上逻辑运算进行过滤,只有满足该逻辑条件的元素才会进入下一个遍历器中。
相关Step:
is()
:可以接受一个对象(能判断想等)或一个判断语句(如:P.gt()
、P.lt()
、P.inside()
等),当接受的是对象时,原遍历器中的元素必须与对象相等才会保留;当接受的是判断语句时,原遍历器中的元素满足判断才会保留,接受一个对象相当于P.eq()
。
and()
:可以接受任意数量的遍历器(traversal),原遍历器中的元素,只有在每个新遍历器中都能生成至少一个输出的情况下才会保留,相当于过滤器组合的与
条件
or()
:可以接受任意数量的遍历器,原遍历器中的元素,只要在全部新遍历器中能生成至少一个输出的情况下就会保留,相当于过滤器组合的或
条件
not()
:仅能接受一个遍历器,原遍历器中的元素,在新遍历器中能生成输出时会被删除,不能生成输出时则会保留,相当于过滤器的非
条件
除了像一般step写法以外,
and()
和or()
还可以放在where()
中以中缀符的形式出现。
示例:
is()
示例:
// 筛选顶点属性"age"为28的属性值,与 is(P.eq(28))等效
g.V().values('age').is(28)
g.V().values('age').is(P.eq(28))
g.V().values('age').is(eq(28))
// 在groovy中,in()、as()是关键字,所以必须使用__.in()、__.as()进行调用。 out()、inE()等可以省略__
g.V().where(__.in('created').count().is(gt(2))).values('name')
and()
示例:
// 所有包含出边“supports”和“implements”的顶点的名字“name”
g.V().and(outE('supports'), outE('implements')).values('name')
// 包含边“created”并且属性“age”为28的顶点的名字“name”
g.V().and(outE('created'), values('age').is(28)).values('name')
and()
作为where()
的中缀写法:
// 包含边“created”并且属性“age”为28的顶点的名字“name”
g.V().where(outE('created')
.and()
.values('age').is(28))
.values('name')
or()
写法同and()
基本一致。
not()
示例:
// 筛选出所有不是“person”的顶点的“label”
g.V().not(hasLabel('person')).label()