或許這將激發你使用小鬼的解決方案。我將你的問題改編成標準的TinkerPop玩具圖。我着手找出以下幾點:
對於一個特定的頂點,發現所有它連接到頂點,然後各自如何在總集那些頂點都彼此相關。這聽起來像你正在尋找你的描述。
於是我開始:
gremlin> g = TinkerGraphFactory.createTinkerGraph()
==>tinkergraph[vertices:6 edges:6]
gremlin> g.v(1).outE.as('x').inV.loop(2){it.loops<3}{true}.select
==>[x:e[7][1-knows->2]]
==>[x:e[8][1-knows->4]]
==>[x:e[9][1-created->3]]
==>[x:e[10][4-created->5]]
==>[x:e[11][4-created->3]]
對於頂點ID爲1,讓所有的出邊,然後循環再次,要得到朋友邊緣,最後選擇了「X」的步驟的值。這讓你至少知道子圖是在g.v(1)附近,但是當我讀到你的問題時,你想進一步將子圖限制在與g.v(1)相連的頂點上。看看結果,e [10]確實不應該被包含,因爲g.v(1)和g.v(5)之間沒有邊界。
我進一步細化查詢,以消除來自子這種關係:
gremlin> x=[g.v(1)];g.v(1).out.aggregate(x).back(2).outE.filter{x.contains(it.inV.next())}.as('e').inV.loop(3){it.loops<3}{true}.select
==>[e:e[7][1-knows->2]]
==>[e:e[8][1-knows->4]]
==>[e:e[9][1-created->3]]
==>[e:e[11][4-created->3]]
所以上面基本上說,
- 初始化列表X將認爲應持有的所有頂點在子圖中。
- gv(1).out.aggregate(x)基本上把我想要的所有頂點放在子圖中,除了我用
- 將它初始化的那個頂點追溯到遍歷的開始並找出包含x中頂點的邊,然後像以前那樣循環它,並選擇作爲邊列表的「e」步的值。
現在你可以看到e [10]不再在結果中。從這裏你可以很容易地構建可視化輸出。
不與朋友做賽後後者在聲明'...'而是把它直接進入比賽階段,比如'MATCH用戶 - [:朋友] -firend- [連接:朋友] -friend2'。這對你有用嗎? – ulkas 2013-03-01 08:50:12
感謝您的回答。我知道我怎麼能找到朋友的朋友,但那是我想要的超集。我只想要朋友的朋友也是用戶的朋友,這也是可選的。如果你認爲每個人都有100個朋友,我想要這個用戶,他的100個朋友,以及這101個人如何彼此交朋友 – nambrot 2013-03-01 12:43:36