2017-01-30 108 views
1

我想返回所有具有特定边缘和边缘添加日期的顶点,但我只是没有得到它的头。TinkerPop 3 - 获取顶点和边缘属性

g.V().out("likes").map{it -> it.dateLiked = it.outE("likes").property("addedOn"); it;} 

在SQL方面,我可以把它像;

SELECT item.*, 
     edge.addedOn 
    FROM item_table item, 
     edge_mapping_table edge 
WHERE item.id = edge.item_id 

回答

4

下面是一个使用“现代”的玩具图形作为一个例子,你可能会做这件事:

gremlin> graph = TinkerFactory.createModern() 
==>tinkergraph[vertices:6 edges:6] 
gremlin> g = graph.traversal() 
==>graphtraversalsource[tinkergraph[vertices:6 edges:6], standard] 
gremlin> g.V().outE('knows').as('e'). 
      inV().as('v'). 
      select('e','v').by('weight').by(valueMap()) 
==>[e:0.5,v:[name:[vadas],age:[27]]] 
==>[e:1.0,v:[name:[josh],age:[32]]] 

所以,与其让“addedOn”,从“喜欢”边缘与性能的“项目”顶点,我想从“知道”边缘获得“重量”和“人”顶点的属性。在第一行中,我们遍历“知道”边缘并将其标记为“e”,然后我们遍历相邻的in个人顶点并将其标记为“v”。最后,我们选择这两个标签的值并对它们应用by转换。 by以循环方式应用,因此第一个by应用于'e',第二个应用于'v'。

使用valueMap有点方便,但通常您会知道您想要从顶点检索的数据,就像您知道要从边缘检索的数据(即“权重”)一样。为了使一个稍好的输出没有所有嵌入Map那么你可以这样做:

gremlin> g.V().outE('knows').as('w'). 
      inV().as('a','n'). 
      select('w','a','n'). 
      by('weight').by('age').by('name') 
==>[w:0.5,a:27,n:vadas] 
==>[w:1.0,a:32,n:josh] 
+0

辉煌,感谢您的迷你教训!出于好奇,还有另外一个步骤,然后再次变平坦,说[e:0.5,名字:vadas,年龄:27]? –

+0

我想你可以解开地图,但也许更好地关于你想要的数据更具体一些。因为你通常不会在SQL中“从表中选择*”,所以通常不会从顶点获取所有数据。因此,我提出了一个稍有不同的解决方案。 –

相关问题