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

vin*_*eth 2 gremlin tinkerpop3

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

ste*_*tte 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]
Run Code Online (Sandbox Code Playgroud)

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

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

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]]
Run Code Online (Sandbox Code Playgroud)

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

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]
Run Code Online (Sandbox Code Playgroud)

重要的是要记住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]]
Run Code Online (Sandbox Code Playgroud)

至于后者:

gremlin> g.V().has('name','marko').valueMap().select('name')
==>[marko]
gremlin> g.V().has('name','marko').valueMap().select(values)
==>[[marko],[29]]
Run Code Online (Sandbox Code Playgroud)

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