TinkerPop 3 - 获取顶点和边缘属性

时间:2017-01-30 09:57:48

标签: titan gremlin tinkerpop3

我想返回所有具有特定边缘的顶点和添加边缘的日期,但我只是没有理解它。

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

1 个答案:

答案 0 :(得分: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]