2

我在 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因为根据定义,边缘集合中的所有文档都具有_toand_from字段,从中可以完全指定图形。

我发现手册的下一页绝对令人困惑(我向作者道歉)并且希望获得有关如何直接从边缘集合创建图形或将边缘集合中的信息合并到现有图形中的任何指导。

4

2 回答 2

4

所以看起来你想创建一个没有定义顶点集合但只有边集合的图。据我所知,您必须有某种顶点集合,边缘可能从这些顶点集合中发出或到达。但是您不需要将此顶点集合显式包含到您的图形中。根据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 并且尚未升级。)

于 2016-08-04T22:08:10.473 回答
1

以下备注已使用 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 集合命名为“caused”。那么我们可以说,在正常的过程中,我们从一个 Document 集合(Person)开始,创建了一个以 Person 为基底的 Edge 集合(who_knows_who),然后创建了一个“元边缘”Edge 集合,其基底为边缘收集,引起

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

但是,实际上可以创建一个自引用的 Edge 集合:我们称之为“自拍”。它可能会让你陷入困境,所以要小心。但从技术上讲,有可能拥有一个“边缘”一直向下的 ArangoDB 图。

于 2017-12-12T11:30:25.997 回答