2016-04-12 4 views
0

私はグラフデータベースを初めて使用しています。私はその答えが1つか2つのコマンドラインとして単純でなければならないと確信しています。OrientDB:親から子へのエッジの作成

私は非常に単純なスキーマを持っています。人と電子メールのクラス。 PersonとEmail、SendFromとSendToの間にはエッジがあります。同じ電子メールで結合されたPerson頂点の間にエッジを作成したいと思います。

たとえば、人物Aが人物BにEメールを送信した場合、AとBの間にエッジを作成し、エッジのカウントプロパティを増やしたいとします。

私はCREATE EDGE FROM (SELECT in() from Email) TO (SELECT out() from Email)のようなものを試しました。 OrientDB用のpythonドライバpyorientを使用しているので、これはPythonスクリプトでも、言語のようなSQLでもかまいません。

詳細が必要な場合は、投稿を編集します。私に知らせて。

+0

javascript関数は便利ですか? –

+0

@AlessandroRota私はそれを試してみましょう。 APIの種類は実際には問題ではありません。 – NeoJi

答えて

1

これはグラフである。この構造で

enter image description here

を試みました。

enter image description here

私はこのjavascript関数を使用していました。

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

これは新しい構造

enter image description here

であり、これは

enter image description here

新しいグラフでは、それがお役に立てば幸いです。

+0

これは素晴らしいです。何らかの「結合」操作で「エッジを作成」コマンドを作成できると思いました。おそらく結果を反復するのが最も簡単です。私はそれの私のpythonのバージョンを投稿します。ありがとう。 – NeoJi

0

これはpyorientを使ったPythonバージョンのAlessandroの答えです。

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)); 
関連する問題