Gremlin 小精灵:我怎样才能用所有的逻辑创造条件?

Gremlin 小精灵:我怎样才能用所有的逻辑创造条件?,gremlin,Gremlin,请帮我查询一下小精灵朗 我有一个有两种顶点的图:位置和变换。我需要通过以下条件找到过渡顶点:所有输入顶点(位置)都有一些标志。如果我使用“has”,它的工作原理与任何输入顶点has标志类似。不是全部 让我告诉你: g.V().hasLabel('Transition').as('trans').in().has('Place', 'Token', 1).select('trans') 例如,我们有一个带有两个输入顶点(位置)的过渡,其中只有一个顶点具有标志。此查询返回转换-但它是错误的,必须为

请帮我查询一下小精灵朗

我有一个有两种顶点的图:位置和变换。我需要通过以下条件找到过渡顶点:所有输入顶点(位置)都有一些标志。如果我使用“has”,它的工作原理与任何输入顶点has标志类似。不是全部

让我告诉你:

g.V().hasLabel('Transition').as('trans').in().has('Place', 'Token', 1).select('trans')
例如,我们有一个带有两个输入顶点(位置)的过渡,其中只有一个顶点具有标志。此查询返回转换-但它是错误的,必须为空结果(直到我们为第二个输入顶点设置标志)

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


谢谢

您可以这样做:

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”具有强制过滤掉“t2”的标记“0”。还有一个“t3”,它有两个“token”属性等于“0”的位置


这里的基本模式是使用一个
filter()
步骤来获取唯一的“令牌”值列表,然后确保它们等于一个包含值“1”的列表。

您是否可以发布一个遍历来帮助创建图形的示例?这将使读者更容易完全理解您的数据结构和您试图实现的目标。我使用data Stax Enterprise-您知道将图形导出为GraphSON格式的方法吗?我不确定首选的方法是什么-也许您应该在datastax Enterprise graph标签下发布一个问题您的代码几乎可以工作!只有一个问题:如果转换有两个输入位置,那么这两个位置都有Token=0。需要再添加一个条件:Token=1.ah-你说得对-稍微更新了我的答案以处理你提出的问题