2012-12-10 59 views
1

對於一個給定的頂點,只有當兩個邊的類型都存在時,我們如何才能得到兩個不同類型(即標籤)的所有外邊?只有當兩邊都存在時,如何獲得給定頂點的兩種給定類型(即標籤)的所有邊?

例如,

g = TinkerGraphFactory.createTinkerGraph(); 

我想知道所有那些誰擁有創建一些軟件和知道人。很顯然,我不能使用

g.V.out('created', 'knows') 

,因爲這會給所有那些誰擁有創建東西一方或知道人。

回答

2

我並沒有特意以這種方式來解決這個問題,但使用和()一步似乎都很好這裏工作:

gremlin> g = TinkerGraphFactory.createTinkerGraph() 
==>tinkergraph[vertices:6 edges:6] 
gremlin> g.V.and(_().both("knows"),_().both("created")) 
==>v[1] 
==>v[4] 

要獲得邊緣/符合頂點的路徑和標準,你可以這樣做:

gremlin> g.V.and(_().both("knows"),_().both("created")).bothE("created","knows").dedup 
==>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] 

由於精怪的第一部分獲取兼得「知道」和「創造」邊的頂點,然後你可以安全地只抓了回來頂點和收益兩者的那些邊緣獨特的。

+0

謝謝@Stephen!然而,它能夠正常工作,返回與此模式匹配的路徑頭部的所有頂點。我想返回'v [1]'和'v [4]'的匹配路徑。但是,當我在模式結尾使用'path'步時,它只返回起始頂點('v [1]','v [4]')。是因爲只有「真」或「假」而不輸出任何元素(頂點或邊)的「步」和「步」? – user1030497

+1

我擴大了答案有點返回的邊緣/路徑。我不知道和()的確切機制,但我認爲你爲什麼'路徑'沒有返回你想要的解釋可能是一個正確的假設。 –

相關問題