簡體   English   中英

從邊緣集合創建arango圖

[英]Create arango graph from an edge collection

我正在arangosh(ArangoDB Shell)中嘗試將一些圖形分析放在一起(如果可以的話,我將在以后移至Foxx)。

我有兩個收藏。 我們稱其為People一組頂點,以及一個名為Relationships的邊緣。

按照手冊,我可以基於People創建一個圖形:

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

graph._addVertexCollection("People");

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

我發現手冊下一頁絕對令人困惑(對作者致歉),並且希望獲得有關如何直接從邊緣集合中創建圖形或將邊緣集合中的信息合並到現有圖形中的任何指導。

因此,看起來您想創建一個沒有定義頂點集合但僅具有邊集合的圖形。 據我所知,您必須具有某種頂點集合,邊緣可能從該頂點集合發出或進入。 但是,您無需將此頂點集合顯式包括到圖形中。 根據2.8文檔 ,它不能完全詳細描述所有內容,因此您可以創建僅包含邊緣集合的圖形:

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: [ ] ]

請注意,集合“頂點”必須存在。 您不一定需要存在“ edges”集合中引用的節點。 但是,如果您想進行遍歷之類的操作,則這些節點必須存在於“頂點”集合中,否則,對於這些遍歷,您將獲得“ null”作為響應。

(當然,這個答案也適用於3.0,但我主要是在使用2.8,但尚未升級。)

以下說明已使用ArangoDB 3.2進行了驗證。

簡而言之,ArangoDB支持元圖。 即, 可能具有其“節點”是Edge集合中的對象的圖。

確實,這樣的圖很普通。

例如,假設我們有一個圖,“ knows_graph”,將“人與人”關聯起來,並且圖的邊緣在“ who_knows_who” Edge集合中。

我們可以創建一個附加圖,例如“ causation_graph”,它與“ who_knows_who”邊相關。 例如,也許“愛麗絲知道鮑勃”導致鮑勃認識了查爾斯:

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

假設我們在“ causation_graph”中為Edge集合命名為“ caused”。 然后我們可以說,在正常情況下,我們從文檔集合(Person)開始,創建以Person為基材的Edge集合(who_knows_who),然后創建以基材為基材的“元邊緣” Edge集合。 導致邊緣收集。

使用ArangoDB GUI時,如果沒有預先存在的Edge集合就無法創建圖,並且通常Edge集合具有一個或多個Document集合作為其基礎。

但是,實際上可以創建一個自引用的Edge集合:我們稱其為“ selfie”。 可能會使您陷入困境,因此請注意。 但是從技術上講,可能有一個ArangoDB Graph一直處於“邊緣”狀態。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM