逻辑运算

Gremlin支持在遍历器上加上逻辑运算进行过滤,只有满足该逻辑条件的元素才会进入下一个遍历器中。

相关Step:

is():可以接受一个对象(能判断想等)或一个判断语句(如:P.gt()P.lt()P.inside()等),当接受的是对象时,原遍历器中的元素必须与对象相等才会保留;当接受的是判断语句时,原遍历器中的元素满足判断才会保留,接受一个对象相当于P.eq()

and():可以接受任意数量的遍历器(traversal),原遍历器中的元素,只有在每个新遍历器中都能生成至少一个输出的情况下才会保留,相当于过滤器组合的条件

or():可以接受任意数量的遍历器,原遍历器中的元素,只要在全部新遍历器中能生成至少一个输出的情况下就会保留,相当于过滤器组合的条件

not():仅能接受一个遍历器,原遍历器中的元素,在新遍历器中能生成输出时会被删除,不能生成输出时则会保留,相当于过滤器的条件

除了像一般step写法以外,and()or()还可以放在where()中以中缀符的形式出现。

示例:

is()示例:

  1. // 筛选顶点属性"age"为28的属性值,与 is(P.eq(28))等效
  2. g.V().values('age').is(28)
  3. g.V().values('age').is(P.eq(28))
  4. g.V().values('age').is(eq(28))
  5. // 在groovy中,in()、as()是关键字,所以必须使用__.in()、__.as()进行调用。 out()、inE()等可以省略__
  6. g.V().where(__.in('created').count().is(gt(2))).values('name')

and()示例:

  1. // 所有包含出边“supports”和“implements”的顶点的名字“name”
  2. g.V().and(outE('supports'), outE('implements')).values('name')
  3. // 包含边“created”并且属性“age”为28的顶点的名字“name”
  4. g.V().and(outE('created'), values('age').is(28)).values('name')

and()作为where()的中缀写法:

  1. // 包含边“created”并且属性“age”为28的顶点的名字“name”
  2. g.V().where(outE('created')
  3. .and()
  4. .values('age').is(28))
  5. .values('name')

or()写法同and()基本一致。

not()示例:

  1. // 筛选出所有不是“person”的顶点的“label”
  2. g.V().not(hasLabel('person')).label()