OrientDB:创建从父到子的边

OrientDB: creating edge from parent to child

我是图形数据库的新手。我很确定答案应该简单到一两个命令行。

我的架构非常简单。个人和电子邮件 class。 Person 和 Email、SendFrom 和 SendTo 之间存在边界。我想在由同一封电子邮件连接的 Person 顶点之间创建边。

例如,如果 A 发送电子邮件给 B。我想在 A 和 B 之间创建一条边,并增加边的计数 属性。

我尝试了类似 CREATE EDGE FROM (SELECT in() from Email) TO (SELECT out() from Email) 的方法。因为我使用的是 pyorient,一个用于 OrientDB 的 python 驱动程序,这可以在 Python 脚本中完成,或者只是 SQL 语言。

如果您需要更多信息,我会编辑我的 post。请告诉我。

我试过这个结构

这是图表。

我使用了这个javascript函数。

var g=orient.getGraph();
var c=g.command("sql","select in('SendFrom')[0].@rid as SF, out('SendTo')[0].@rid as ST from email");
for(i=0;i<c.length;i++){
    var p1=c[i].getProperty("SF");
    var id1=p1.toString();
    id1=id1.substring(id1.lastIndexOf("[")+1,id1.lastIndexOf("]"));
    var p2=c[i].getProperty("ST");
    var id2=p2.toString();
    id2=id2.substring(id2.lastIndexOf("[")+1,id2.lastIndexOf("]"));
    g.command("sql","create edge e from " + id1 + " to " + id2 );
}

这是新结构

这是新图表

希望对您有所帮助。

这只是 Alessandro 使用 pyorient 的回答的 Python 版本。

cluster_id = client.command("create class Email_ex extends E")                   
rst = client.query("select in('SendFrom') as SF, out('SendTo') as ST " +         
                   "from Email limit -1")                                                                                                    
for email in rst:                                                                
    for sf in email.SF:                                                          
        for st in email.ST:                                                      
            edge_ex = client.command("create edge Email_ex from " +  
                                     str(sf) + " to " + str(st));