从边创建 arango 图 collection

Create arango graph from an edge collection

我在 arangosh(ArangoDB Shell)工作,试图将一些图形分析放在一起(如果我能做到这一点,我稍后会转移到 Foxx)。

我有两个 collection。 collection 个顶点,我们称之为 People,还有一条边 collection、Relationships

根据 manual 我可以根据 People:

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

graph._addVertexCollection("People");

但我知道 People 不包含连接此图中的顶点所需的信息。如果有的话,我宁愿简单地从边缘 collection Relationships 创建图表,因为根据定义,边缘 collections 中的所有文档都有 _to_from 字段,从中可以完全指定图表。

我发现 next pages of the manual 绝对令人费解(我向作者道歉),如果能提供有关如何直接从边 collection 创建图形或合并信息的任何指导,我将不胜感激现有图形中的边 collection。

看来您想创建一个没有定义顶点集合但只有边集合的图。据我所知,您必须有某种顶点集合,边可能从中发出或到达。但是您不需要将此顶点集合显式包含到您的图中。根据 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: [ ] ]

请注意集合 "vertices" 必须存在。您不一定需要 "edges" 集合中引用的节点存在。但是如果你想做任何类似遍历的事情,节点必须存在于 "vertices" 集合中,否则你将得到 "null" 作为对这些遍历的响应。

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

以下备注已使用ArangoDB 3.2验证

简而言之,ArangoDB 支持元图。也就是说,可以有图 "nodes" 是 Edge 集合中的对象。

确实,这样的图很普通。

例如,假设我们有一个图 "knows_graph",将人与人相关联,并且图的边在 "who_knows_who" 边集合中。

我们可以创建一个附加图,比如 "causation_graph",关联 "who_knows_who" 条边。例如,也许 "Alice knows Bob" 导致 Bob 认识了 Charles:

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

假设我们将名称 "caused" 命名为 "causation_graph" 中的 Edge 集合。那么我们可以说,正常情况下,我们从一个Document集合(Person)开始,创建一个以Person为底物的Edge集合(who_knows_who),然后创建一个"meta-edge"Edge集合其基础是 Edge 集合,导致

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

但是,实际上可以创建一个自引用的 Edge 集合:我们称它为 "selfie"。这可能会让你陷入困境,所以要小心。但从技术上讲,ArangoDB Graph 是 "edges" 一直向下是可能的。