2016-08-04 114 views
1

我正在arangosh(ArangoDB Shell)中尝试组合一些图形分析(如果能够实现此功能,我将转移到Foxx)。从边缘集合创建arango图形

我有两个集合。我们称之为顶点集合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是绝对令人困惑的(我向作者道歉),并希望得到关于如何从边缘集合直接创建图形或将边缘集合中的信息合并到现有图形中的任何指导。

回答

4

所以它看起来像你想创建一个没有定义的顶点集合的图形,但只有一个边集合。据我所知,你必须有某种顶点集合,从中可以发出或去往哪些边缘。但是你不需要将这个顶点集合明确地包含到你的图中。按照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: [ ] ] 

注意收集“顶点”必须存在。您不一定需要“边缘”集合中引用的节点存在。但是如果你想做遍历等任何事情,节点必须存在于“顶点”集合中,否则你会得到“空”作为对这些遍历的响应。

(很肯定这个答案适用于3.0为好,但我主要是使用了2.8和还没有进行升级。)

+0

太棒了,谢谢! – ohruunuruus

0

以下的言论一直在使用ArangoDB 3.2验证。

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

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

我们可以创建一个附加的图形,比如说“causation_graph”,关联“who_knows_who”边缘。举例来说,也许“Alice知道鲍勃”导致鲍勃结识查尔斯:

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

让我们假设我们给在“causation_graph”“引起”到边缘集合名称。然后我们可以说,在正常情况下,我们从一个Document集合(Person)开始,创建一个以Person为基础的Edge集合(who_knows_who),然后创建一个“meta-edge”Edge集合,其基底是边缘收集,导致

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

但是,实际上可以创建一个自引用Edge集合:我们称之为“自拍”。这可能会把你打结,所以要警告。但从技术上讲,可能会有一个ArangoDB图形“边缘”一路下降。