2013-03-23 84 views

回答

1

下面是使用的Gremlin和剛剛殺出aureliusgraphs郵件列表上樹數據樣本的解決方案:

g = new TinkerGraph() 
root = g.addVertex(['name':'root']) 
c1 = g.addVertex(['name':'1', 'sortIndex':1]) 
c11 = g.addVertex(['name':'1.1', 'sortIndex':1]) 
c12 = g.addVertex(['name':'1.2', 'sortIndex':2]) 
c121 = g.addVertex(['name':'1.2.1','sortIndex':1]) 
c122 = g.addVertex(['name':'1.2.2','sortIndex':2]) 
c13 = g.addVertex(['name':'1.3', 'sortIndex':3]) 
c2 = g.addVertex(['name':'2', 'sortIndex':2]) 
c21 = g.addVertex(['name':'2.1', 'sortIndex':1]) 
c22 = g.addVertex(['name':'2.2', 'sortIndex':2]) 
c3 = g.addVertex(['name':'3', 'sortIndex':3]) 
c31 = g.addVertex(['name':'3.1', 'sortIndex':1]) 
c32 = g.addVertex(['name':'3.2', 'sortIndex':2]) 
g.addEdge(root, c1, 'has') 
g.addEdge(root, c2, 'has') 
g.addEdge(root, c3, 'has') 
g.addEdge(c1, c11, 'has') 
g.addEdge(c1, c12, 'has') 
g.addEdge(c1, c13, 'has') 
g.addEdge(c2, c21, 'has') 
g.addEdge(c2, c22, 'has') 
g.addEdge(c3, c31, 'has') 
g.addEdge(c3, c32, 'has') 
g.addEdge(c12, c121, 'has') 
g.addEdge(c12, c122, 'has') 

上面的代碼初始化圖應該很好地粘貼到Gremlin提示。一旦圖形被建立,簡單地發出此命令遍歷樹,總結的數值(在此情況下sortIndex字段):

gremlin> total=0;root.out.sideEffect{total+=it.sortIndex}.loop(2){true} 
gremlin> total 
==>21 

上面的代碼初始化total變量,然後從root開始遍歷頂點,遍歷出來,然後將sortIndex字段的值加到總數中。然後它在樹上循環/重複該操作直到它耗盡它(最後的true控制它循環的時間)。

我用TinkerGraph爲了方便,但是這個代碼將與Neo4j的或OrientDB工作(我看到那些其他的標籤在這個問題上),通過簡單地改變圖形執行如下命令:

g = new Neo4jGraph('/tmp/neo4j') 

g = new OrientGraph('memory:/graph')