OrientDB - 使用自联接类型创建边缘

时间:2015-05-28 12:48:43

标签: orientdb

我使用OETL从RDMBS将分层数据导入OrientDB。在RDBMS中,我们曾经将parentId存储在同一行中。 例如表结构是这样的:

  

ID - 名称 - Parent_ID

     

Corp - Corporate Office - Corp

     

D1 - 地区办事处1 - Corp

     

D2 - 地区办事处2 - Corp

     

SO1 - 小型办公室1 - D1

     

SO2 - 小型办公室2 - D2

     

SO3 - 小型办公室3 - D1

现在每一行都是Orientdb中的一个节点。

我想创建一个边缘(ParentOf),从公司说到D1,D1到SO1,依此类推。

如何编写查询来实现此目的?沿袭这条线的东西?

  

从(从节点中选择)a到(从节点中选择)创建边缘parentOf   其中a.id = parent_id)

抱歉,我仍然在考虑关系数据库方式。

Orient DB版本是orientdb-community-2.0.9

3 个答案:

答案 0 :(得分:1)

感谢pembeci,以下是最终成功的功能:

var db = orient.getGraph();
var nodes = db.getVerticesOfClass("nodex");
var itr = nodes.iterator();

while(itr.hasNext()) {
   var vertex = itr.next();
   var id = vertex.getProperty("id");
   var children = db.getVertices("parent_id", id);
   var childItr = children.iterator();

   while(childItr.hasNext()) {
      var child = childItr.next();
      vertex.addEdge("parentOf", child);
   }
}

答案 1 :(得分:0)

您无法将信息从第一个选择查询(从部分)传递到第二个查询(部分)。所以你应该创建一个server side function。这样的东西可能会起作用(我稍后会测试它,当我可以访问Orient Studio时):

var db = orient.getGraph;
var nodes = db.getVerticesOfClass("node");
for (var i=0; i<nodes.length; i++) {
   var vertex = nodes[i]
   var id = vertex.getProperty("id");
   var children = db.getVertices("parent_id", id);
   for (var j=0; j<children.length; j++) {
      var child = children[j];
      vertex.addEdge("parentOf", child)
   }
}

答案 2 :(得分:0)

js功能永远在运行。最后写了java代码来做到这一点:

        OrientGraph graph = new OrientGraph("remote:localhost/testNode", "root", "root");

        for (Vertex v : graph.getVerticesOfClass("Node")) 
        {
            String id = v.getProperty("ID");    

            System.out.println("Checking children of: " + id);
            String sql = "select from node where PARENT_ID = '"+id+"'";

            for (Vertex child : (Iterable<Vertex>) graph.command(
                    new OCommandSQL(sql))
                    .execute()) 
            {
                v.addEdge("parent_of", child);
                System.out.println("\tAdded 'Parent Of' Edge from: " + id + " to " + child.getProperty("ID"));

            }               
            graph.commit();
        }