在gremlin中使用商店和选择关键字

时间:2017-11-23 12:53:01

标签: gremlin tinkerpop3

我是gremlin的新手。我按照tinkerpop3上的文件。但我无法理解商店和选择关键字的使用。任何人都可以解释它吗?

1 个答案:

答案 0 :(得分:5)

store()步骤收集通过遍历的对象作为遍历的副作用。例如,让我说我有这种遍历(使用TinkerPop中包装的现代玩具图形):

gremlin> g.V().has("name","marko").store("markos").outE()
==>e[9][1-created->3]
==>e[7][1-knows->2]
==>e[8][1-knows->4]

遍历获取名为" marko"的所有顶点。将它们存储在名为" markos"的列表中。然后用outE()遍历它们的边缘,我们得到边缘作为输出。另外一点,如果我们想得到那个" markos"列出我们的遍历,我们必须cap()遍历:

gremlin> g.V().has("name","marko").store("markos").outE().cap('markos')
==>[v[1]]

store()步骤在这种情况下有点无用,但想象一下,当他在图表中走动时,用它来告诉Gremlin为你收集东西。也许你可以告诉他收集一堆边缘,例如:

gremlin> g.V().has("name","marko").outE().store("edges").inV().outE().store('edges').inV().cap('edges')
==>[e[9][1-created->3],e[7][1-knows->2],e[8][1-knows->4],e[10][4-created->5],e[11][4-created->3]]

您还可以通过允许访问副作用的步骤引用store()收集的列表。一个常见的用例可能是忽略已遍历的内容:

gremlin> g.V().has("name","marko").store('marko').out().in()
==>v[1]
==>v[4]
==>v[6]
==>v[1]
==>v[1]
gremlin> g.V().has("name","marko").store('marko').out().in().where(without('marko'))
==>v[4]
==>v[6]

重要的是要记住store()在工作中是懒惰的。它在遍历执行时收集。如果你需要与之相反,那么你应该选择aggregate(),它在评估中非常渴望(它将遍历耗尽到aggregate()被调用的点。)

select()关键字可让您访问遍历的前一部分并选择分开的地图。对于前者,您可能需要访问带标签的步骤:

gremlin> g.V().has("name","marko").as('a').outE().select('a')
==>v[1]
==>v[1]
==>v[1]
gremlin> g.V().has("name","marko").as('a').outE().inV().as('b').select('a','b')
==>[a:v[1],b:v[3]]
==>[a:v[1],b:v[2]]
==>[a:v[1],b:v[4]]

至于后者:

gremlin> g.V().has('name','marko').valueMap().select('name')
==>[marko]
gremlin> g.V().has('name','marko').valueMap().select(values)
==>[[marko],[29]]

我不确定您何时需要选择特定用例,因为它是具有广泛适用性的通用类步骤。