在gremlin中使用存储和选择关键字

在gremlin中使用存储和选择关键字,gremlin,tinkerpop3,Gremlin,Tinkerpop3,我是小精灵的新手。我继续看文件。但是我不明白store和select关键字的用法。。有人能简单地解释一下吗?作为遍历的副作用,store()步骤收集通过遍历的对象。例如,假设我有这个遍历(使用TinkerPop中打包的现代玩具图): 遍历获取所有名为“marko”的顶点,将它们存储在一个名为“markos”的列表中,然后使用outE()遍历它们的外边,我们得到边作为输出。另外一点是,如果我们想从遍历中得到“markos”列表,我们必须cap()遍历: gremlin> g.V().has(

我是小精灵的新手。我继续看文件。但是我不明白store和select关键字的用法。。有人能简单地解释一下吗?

作为遍历的副作用,
store()
步骤收集通过遍历的对象。例如,假设我有这个遍历(使用TinkerPop中打包的现代玩具图):

遍历获取所有名为“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]]
我不确定在您需要选择时是否有特定的用例,因为这是一种具有广泛适用性的通用步骤

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