Как использовать OrientDB fetchPlan для возврата SQL Traverse

Как в Java, так и в SQL я могу просмотреть список вершин, чтобы получить все связанные узлы. Но я не могу получить тот же результат при использовании fetchPlan.

Это возвращает правильный граф (все узлы связаны с родителем, но не с другими родителями, которые используют один и тот же дочерний узел).

traverse out('Dependency') from #33

Я ищу план выборки, который вернет тот же график. Ниже вставлен fetchPlan, который близок, но извлекает другие корневые узлы, и мне нужны только все дочерние элементы одного родителя.

id.getRecord().toJSON("fetchPlan:out_Dependency:6")

Моя БД имеет 2 вершины и 1 ребро, соединяющее их. Родитель -> Край -> Дочерний элемент. Ребенок может быть связан с несколькими родителями, но с точки зрения родителей я хочу видеть только его детей, не связанных с родителями.


person Kirk    schedule 27.07.2016    source источник


Ответы (2)


Попробуй это:

select @this.toJSON('fetchPlan:out_Dependency:2') from #21:0

вот что я получаю:

введите здесь описание изображения

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

Надеюсь, поможет.

С уважением.

person Michela Bonizzi    schedule 27.07.2016
comment
спасибо за ответ, он дает мне дочерний элемент родителя, но не дает дочерних детей. Traverse делает это правильно. У родителя есть ребенок, и у этого ребенка может быть ребенок. - person Kirk; 28.07.2016
comment
Но хотите ли вы, чтобы запрос возвращал вам дочерние элементы определенной записи или дочерние элементы всех родителей? - person Michela Bonizzi; 28.07.2016
comment
Как и дерево зависимостей Java, я хочу видеть, что SpringMVC зависит от SpringCore, который зависит от apacheCommons. Но я не хочу видеть сотни других проектов, зависящих от apacheCommons или Spring. - person Kirk; 28.07.2016
comment
Вам подойдет функция javascript? - person Michela Bonizzi; 28.07.2016
comment
Конечно. В настоящее время я отображаю набор результатов, используя рекурсивную функцию javascript. Если бы я знал больше об orientdbJS, возможно, я бы пропустил этот шаг. - person Kirk; 28.07.2016

С javascript вы можете использовать эту функцию с параметром rid

var g=orient.getGraph();
var nodes = [];
var previous=[];
var currently=[];
var b=g.command("sql","select from " + rid);
if(b.length>0){
    var vertex=b[0];
    previous.push(vertex);
    nodes.push(vertex);
    do{
        for(i=0;i<previous.length;i++){
            var vertexOut=previous[i];
            var vertices=g.command("sql","select expand(out('Dependency')) from "+ vertexOut.getId());
            for(j=0;j<vertices.length;j++){ 
                currently.push(vertices[j]);
                nodes.push(vertices[j]);
            }
        }
        change();
    }while(previous.length>0);
    return nodes;
}

function change(){
    previous=[];
    for (indice=0;indice<currently.length;indice++)
        previous.push(currently[indice]);
    currently=[];
}

Надеюсь, поможет

person Alessandro Rota    schedule 29.07.2016