如何使用OrientDB fetchPlan返回SQL Traverse

时间:2016-07-27 21:40:42

标签: orientdb orientdb2.2

在Java和SQL中,我可以通过顶点列表递归以获取所有链接节点。但是在使用fetchPlan时我似乎无法得到相同的结果。

这将返回正确的图形(链接到父节点的所有节点,但不包含共享同一子节点的其他父节点)

traverse out('Dependency') from #33

我正在寻找一个将返回相同图表的获取计划。下面粘贴的是一个fetchPlan,它关闭但是拉入其他根节点,我只想要一个父节点的所有子节点。

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

我的数据库有2个顶点和1个边连接它们。家长 - >边缘 - >儿童。一个孩子可能与多个父母有关,但从父母的角度来看,我只想看到他的孩子没有与父母联系。

2 个答案:

答案 0 :(得分:0)

试试这个:

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

这就是我得到的:

enter image description here

正如您所看到的,查询只返回链接的子节点,而不是其他父节点。

希望它有所帮助。

问候。

答案 1 :(得分:0)

使用javascript,您可以将此功能与参数化删除

一起使用
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=[];
}

希望有所帮助