2016-08-08 1 views
0

После this question и отличный ответ от CoDEManX, я хотел бы спросить, как использовать предыдущий результат (массив возвращенных узлов), чтобы запросить все ссылки в этом коллекция.ArangoDB: получить все ссылки из массива узлов

В основном я намеревался использовать результат

FOR v IN 0..100 ANY "Entity/node_id" 
EntityRelation OPTIONS  
{uniqueVertices: "global"} 
RETURN v._key 

для ссылок запроса:

"FOR c IN EntityRelation FILTER c._from==" + "\"" + 
node._id + "\"" + " OR c._to==" + "\"" + 
node._id + "\"" + " RETURN c"; 

Как я должен подойти к нему?

ответ

2

Я не уверен, что вы хотите достичь точно, но вот два возможных решения:

FOR v IN 0..100 ANY "Entity/node_id" EntityRelation OPTIONS {uniqueVertices: "global"} 
    FOR vv, c IN ANY v EntityRelation 
    RETURN c 

Выше запрос использует вложенный для цикла (на самом деле обход) для выполнения обхода для каждого узла, возвращаемого путем внешнего обхода, используя v в качестве начальной вершины и игнорируя направление ребер. Возвращаются все краевые документы внутреннего обхода.

Если вы хотите края внешнего обхода, это даже не нужно:

FOR v, e IN 0..100 ANY "Entity/node_id" EntityRelation OPTIONS {uniqueVertices: "global"} 
    RETURN e 

Если вы хотите получить доступ к результатам обхода позже в запросе, превратить его в подзапрос и присвоить результат к переменной:

LET nodes = (
    FOR v IN 0..100 ANY "Entity/node_id" EntityRelation OPTIONS {uniqueVertices: "global"} 
    RETURN v._id 
) 
FOR node IN nodes 
    FOR vv, c IN ANY node EntityRelation 
    RETURN c 

Обратите внимание, что первый обход возвращает только идентификаторы документов. Их достаточно, чтобы начать другой обход с этих узлов, и никакие другие свойства вершин в любом случае не используются. Возвращение всех документов будет работать, но не так эффективно.

+0

Извините, так как я фазу вопрос так плохо. Я просто хочу получить все ссылки с любой глубины, заданной узлом. Таким образом, результат ссылок, если вы выбираете узел A, B, C, D, тот же, если они связаны. Но из вашего ответа я сделал рабочий, используя вложенный, чтобы получить узлы, а затем запрашивать входящие ссылки с этих узлов. –

+0

Я вижу, поэтому вы обнаруживаете, что все узлы подключены к определенному узлу, а затем возвращают все узлы, которые указывают на эти узлы. Я думаю, что подход гнездования является лучшим решением в этом случае. – CoDEmanX