繁体   English   中英

从边缘集合创建arango图

[英]Create arango graph from an edge collection

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

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

因此,看起来您想创建一个没有定义顶点集合但仅具有边集合的图形。 据我所知,您必须具有某种顶点集合,边缘可能从该顶点集合发出或进入。 但是,您无需将此顶点集合显式包括到图形中。 根据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,但尚未升级。)

以下说明已使用ArangoDB 3.2进行了验证。

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

确实,这样的图很普通。

例如,假设我们有一个图,“ knows_graph”,将“人与人”关联起来,并且图的边缘在“ who_knows_who” Edge集合中。

我们可以创建一个附加图,例如“ causation_graph”,它与“ who_knows_who”边相关。 例如,也许“爱丽丝知道鲍勃”导致鲍勃认识了查尔斯:

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

假设我们在“ causation_graph”中为Edge集合命名为“ caused”。 然后我们可以说,在正常情况下,我们从文档集合(Person)开始,创建以Person为基材的Edge集合(who_knows_who),然后创建以基材为基材的“元边缘” Edge集合。 导致边缘收集。

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

但是,实际上可以创建一个自引用的Edge集合:我们称其为“ selfie”。 可能会使您陷入困境,因此请注意。 但是从技术上讲,可能有一个ArangoDB Graph一直处于“边缘”状态。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM