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



我是Gremlin的新手。我遵循TinkerPop3上的文档。但是我不明白商店的使用和选择关键字。.任何人可以简单地解释它吗?

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

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

最新更新