2016-04-12 9 views
0

Ich bin neu in einer Diagrammdatenbank. Ich bin mir sehr sicher, dass die Antwort einfach als eine oder zwei Befehlszeilen sein sollte.OrientDB: Erstellen von Kante von Eltern zu Kind

Ich habe ein sehr einfaches Schema. Personen- und E-Mail-Klasse. Es gibt Kanten zwischen Person und Email, SendFrom und SendTo. Ich möchte Kanten zwischen Personenscheitelpunkten erstellen, denen die gleiche E-Mail beigefügt ist.

Zum Beispiel, wenn Person A eine E-Mail an Person B sendet. Ich möchte eine Kante zwischen A und B erstellen und Zählereigenschaft der Kante inkrementieren.

Ich habe versucht, etwas wie, CREATE EDGE FROM (SELECT in() from Email) TO (SELECT out() from Email). Da ich pyorient, einen Python-Treiber für OrientDB, verwende, könnte dies im Python-Skript oder einfach in SQL-ähnlicher Sprache erfolgen.

Ich werde meinen Beitrag bearbeiten, wenn Sie weitere Informationen benötigen. Lass es mich wissen.

+0

Könnte eine JavaScript-Funktion für Sie nützlich sein? –

+0

@AlessandroRota sicher werde ich es versuchen. Art der API ist eigentlich keine Frage. – NeoJi

Antwort

1

Ich habe versucht, mit dieser Struktur

enter image description here

Dies ist die grafische Darstellung.

enter image description here

Ich habe diese Javascript-Funktion.

var g=orient.getGraph(); 
var c=g.command("sql","select in('SendFrom')[0][email protected] as SF, out('SendTo')[0][email protected] 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); 
} 

Dies ist die neue Struktur

enter image description here

und das ist der neue Graph

enter image description here

Hoffe, es hilft.

+0

Das funktioniert super. Ich dachte, ich könnte einen 'Create Edge'-Befehl mit einer Art' Join'-Operation machen. Vielleicht ist das Iterieren über das Ergebnis am einfachsten. Ich werde meine Python-Version veröffentlichen. Vielen Dank. – NeoJi

0

Dies ist nur eine Python-Version von Alessandros Antwort mit pyorient.

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));