从边创建 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" 一直向下是可能的。
我在 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" 一直向下是可能的。