2016-08-04 2 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: [ ] ] 

Обратите внимание, что коллекция «вершина», должна существовать. Вам не обязательно, чтобы узлы, на которые ссылаются в коллекции «edge», существуют. Но если вы хотите сделать что-либо вроде обхода, узлы должны существовать в коллекции «вершины», иначе вы получите «null» в качестве ответа для этих обходов.

(Уверен, что этот ответ применим к 3.0, а также, но я в основном использую 2.8 и еще модернизировать.)

+0

Awesome, спасибо! – ohruunuruus

0

Следующие замечания были проверены с помощью ArangoDB 3.2.

Вкратце, ArangoDB поддерживает метаграфики. То есть возможно иметь графики, чьи «узлы» являются объектами в коллекции Edge.

Действительно, такие графики довольно обычны.

Например, предположим, что у нас есть график «know_graph», связанный с Person to Person, и что ребра графа находятся в коллекции «who_knows_who» Edge.

Мы можем создать дополнительный график, например «causation_graph», связанный с краями «who_knows_who». Например, может быть, «Алиса знает Боб» в результате Боба узнавая Чарльз:

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

Давайте предположим, что мы дали название «вызванное» в коллекцию Эджа в «causation_graph».Затем мы можем сказать, что в обычном ходе мы начали с коллекции документов (Person), создали коллекцию Edge (who_knows_who) с Person в качестве субстрата, а затем создали «мета-краевую» Edge-коллекцию, субстратом которой является Коллекция краев, вызвана.

При использовании графического интерфейса ArangoDB невозможно создать график без ранее существовавшей коллекции Edge, и обычно коллекция Edge имеет одну или несколько коллекций документов в качестве подложки.

Однако на самом деле можно создать самореферентную коллекцию Edge: назовем ее «selfie». Скорее всего, вы привяжете вас к узлам, поэтому будьте осторожны. Но технически можно иметь график ArangoDB, который является «краем» до конца.