TinkerPop 3 - 获取顶点和边 属性

TinkerPop 3 - Get Vertex and edge property

我想 return 所有具有特定边的顶点和添加边的日期,但我只是不明白它。

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

以下是您可以使用 "modern" 玩具图作为示例的一种方法:

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

所以,我不想从 "likes" 边获取 "addedOn" 和 "item" 顶点的属性,而是想从 [=29] 获取 "weight" =] 边和 "person" 顶点的属性。第一行,我们在"knows"边上遍历出来,标记为'e',然后遍历到相邻的in人顶点,标记为'v'。最后,我们 select 这两个标签的值并对它们应用 by 转换。 by 以 round-robin 方式应用,因此第一个 by 应用于 'e',第二个应用于 'v'。

使用 valueMap 有点方便,但通常您会知道要从顶点检索的数据,就像您知道要从边检索的数据一样(即 "weight").为了在没有所有嵌入式 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]