从边集合创建arango图

时间:2016-08-04 20:34:40

标签: graph arangodb arangojs

我正在arangosh(ArangoDB Shell)工作,尝试整理一些图形分析(如果我可以让它工作的话,我将在稍后转移到Foxx。)

我有两个系列。我们将调用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绝对令人困惑(我向作者道歉)并希望了解如何直接从边缘集合创建图表,或将边缘集合中的信息合并到现有集合中曲线图。

2 个答案:

答案 0 :(得分:4)

所以看起来你想创建一个没有定义顶点集合但只有边集合的图形。据我所知,你必须有某种顶点集合,边缘可以从中发出或去往。但是您不需要在图表中明确包含此顶点集合。根据{{​​3}}  无可否认地确切地说明了一切,你可以创建一个只有边缘集合的图形:

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

请注意,集合"顶点"必须存在。您不一定需要在" edge"中引用的节点。集合存在。但是如果你想做任何像遍历这样的事情,节点必须存在于"顶点"收集,否则你会得到" null"作为对这些遍历的回应。

(很确定这个答案也适用于3.0,但我主要使用的是2.8并且尚未升级。)

答案 1 :(得分:0)

以下评论已使用ArangoDB 3.2验证。

简而言之,ArangoDB支持元图。也就是说,可能有一个图形的“节点”是Edge集合中的对象。

实际上,这些图表很普通。

例如,假设我们有一个Graph,“knows_graph”,将Person与Person相关联,并且图的边缘位于“who_knows_who”Edge集合中。

我们可以创建一个额外的图形,比如说“causation_graph”,关联“who_knows_who”边缘。例如,也许“爱丽丝知道鲍勃”导致鲍勃认识了查尔斯:

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

假设我们在“causation_graph”中给Edge集合命名了“cause”。然后我们可以说,在正常的过程中,我们从Document集合(Person)开始,创建一个以Person为基础的Edge集合(who_knows_who),然后创建一个“meta-edge”Edge集合,其基础是边缘集合,导致

使用ArangoDB GUI时,如果没有预先存在的Edge集合,则无法创建图表,通常Edge集合会将一个或多个Document集合作为其基础。

然而,实际上可以创建一个自引用边缘集合:让我们称之为“自拍”。这可能会让你陷入困境,所以请注意。但从技术上讲,ArangoDB图形可能一直是“边缘”。