2016-08-04 101 views
1

我正在arangosh(ArangoDB Shell)中嘗試組合一些圖形分析(如果能夠實現此功能,我將轉移到Foxx)。從邊緣集合創建arango圖形

我有兩個集合。我們稱之爲頂點集合People,邊緣集合Relationships

manual我可以創建基於People圖:

var graph_module = require("@arangodb/general-graph"); 
var graph = graph_module._create("population"); 

graph._addVertexCollection("People"); 

但我知道,People不包含所需的信息的頂點連接在該圖。如果有的話,我寧願簡單地創建來自邊集合Relationships的圖形,因爲根據定義,邊集合中的所有文檔都有_to_from字段,從中可以完全指定圖。

我發現next pages of the manual是絕對令人困惑的(我向作者道歉),並希望得到關於如何從邊緣集合直接創建圖形或將邊緣集合中的信息合併到現有圖形中的任何指導。

回答

4

所以它看起來像你想創建一個沒有定義的頂點集合的圖形,但只有一個邊集合。據我所知,你必須有某種頂點集合,從中可以發出或去往哪些邊緣。但是你不需要將這個頂點集合明確地包含到你的圖中。按照2.8 docs 這固然不正是所有的細節,您可以創建只是邊集合圖:

arangosh> var graph_module = require("org/arangodb/general-graph"); 
arangosh> var edgeDefinitions = [ { collection: "edges", "from": [ "vertices" ], "to" : [ "vertices" ] } ]; 
arangosh> graph = graph_module._create("myGraph", edgeDefinitions); 
[ Graph myGraph EdgeDefinitions: [ 
    "edges: [vertices] -> [vertices]" 
] VertexCollections: [ ] ] 

注意收集「頂點」必須存在。您不一定需要「邊緣」集合中引用的節點存在。但是如果你想做遍歷等任何事情,節點必須存在於「頂點」集合中,否則你會得到「空」作爲對這些遍歷的響應。

(很肯定這個答案適用於3.0爲好,但我主要是使用了2.8和還沒有進行升級。)

+0

太棒了,謝謝! – ohruunuruus

0

以下的言論一直在使用ArangoDB 3.2驗證。

簡而言之,ArangoDB支持元圖。也就是說,有可能具有其「節點」是Edge集合中的對象的圖。

確實,這樣的圖很平常。例如,假設我們有一個Graph,「knows_graph」,將Person與Person相關聯,並且圖的邊緣位於「who_knows_who」Edge集合中。

我們可以創建一個附加的圖形,比如說「causation_graph」,關聯「who_knows_who」邊緣。舉例來說,也許「Alice知道鮑勃」導致鮑勃結識查爾斯:

knows(_from: Alice, _to: Bob) => knows(_from: Bob, _to: Charles) 

讓我們假設我們給在「causation_graph」「引起」到邊緣集合名稱。然後我們可以說,在正常情況下,我們從一個Document集合(Person)開始,創建一個以Person爲基礎的Edge集合(who_knows_who),然後創建一個「meta-edge」Edge集合,其基底是邊緣收集,導致

使用ArangoDB GUI時,如果沒有預先存在的Edge集合,則無法創建圖形,通常Edge集合具有一個或多個文檔集合作爲其基底。

但是,實際上可以創建一個自引用Edge集合:我們稱之爲「自拍」。這可能會把你打結,所以要警告。但從技術上講,可能會有一個ArangoDB圖形「邊緣」一路下降。