2017-01-30 107 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中「從表中選擇*」,所以通常不會從頂點獲取所有數據。因此,我提出了一個稍有不同的解決方案。 –

相關問題