我正在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绝对令人困惑(我向作者道歉)并希望了解如何直接从边缘集合创建图表,或将边缘集合中的信息合并到现有集合中曲线图。
答案 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图形可能一直是“边缘”。