Gremlin:我怎么能用ALL逻辑制作条件?

时间:2017-03-03 18:49:04

标签: gremlin

请帮我查询Gremlin lang。

我有一个包含两种顶点类型的图形:位置和过渡。我需要通过这种条件找到转换顶点:所有输入顶点(Places)都有一些标志。如果我使用“has”,这就像任何输入顶点都有标志一样。不是全部。

让我告诉你:

g.V().hasLabel('Transition').as('trans').in().has('Place', 'Token', 1).select('trans')

例如,我们有一个带有两个输入顶点(位置)的过渡,这个顶点中只有一个有标志。此查询返回Transition - 但它是错误的,必须为空结果(直到我们为第二个输入顶点设置标志)。

换句话说,我需要将“has”替换为“all”。我如何构建这样的查询?

感谢。

1 个答案:

答案 0 :(得分:2)

你可以这样做:

gremlin> graph = TinkerGraph.open()
==>tinkergraph[vertices:0 edges:0]
gremlin> g = graph.traversal()
==>graphtraversalsource[tinkergraph[vertices:0 edges:0], standard]
gremlin> g.addV('transition').property('name','transition1').as('t1').
......1>   addV('transition').property('name','transition2').as('t2').
......2>   addV('transition').property('name','transition3').as('t3').
......3>   addV('place').property('token',1).as('p1').
......4>   addV('place').property('token',1).as('p2').
......5>   addV('place').property('token',0).as('p3').
......6>   addV('place').property('token',0).as('p4').
......7>   addE('at').from('p1').to('t1').
......8>   addE('at').from('p1').to('t2').
......9>   addE('at').from('p2').to('t1').
.....10>   addE('at').from('p3').to('t2').
.....11>   addE('at').from('p3').to('t3').
.....12>   addE('at').from('p4').to('t3').iterate()
gremlin> g.V().hasLabel('transition').
......1>   filter(__.in().values('token').
......2>             dedup().fold().
......3>             is(eq([1])))
==>v[0]

请注意,在这种情况下,v[0]是标有" t1"的顶点。在我生成的样本数据中。它有两个边缘来自" p1"和" p2"它们都有一个"令牌"相当于" 1"而" t2"顶点有两个边缘来自" p1"和" p3"在哪里" p3"有一个" 0"的标记哪种力量" t2"要过滤掉。还有一个" t3"它有两个地方"令牌"属性等于" 0"。

这里的基本模式是使用filter()步骤获取"令牌的唯一列表"值,然后确保它们等于具有值" 1"的值的列表。在它。