在 gremlin 中使用 store 和 select 关键字

Use of store and select keywords in gremlin

我是 gremlin 的新手。我关注了 tinkerpop3 上的文档。但是我无法理解store和select关键字的用法..谁能简单解释一下?

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]]

我不确定当您需要 select 时是否存在特定用例,因为它是具有广泛适用性的通用步骤。