2016-09-14 8 views
0

同じクラスの2つのノード間のエッジ(u、v)を同じ年とv.yearを共有するグラフに作成することに興味があります= u.year + 1。OrientDBは同じ年の2つのノード間でエッジを作成する

は、私がvertices.csvていると言う:

id,date 
A,2014-01-02 
B,2015-01-02 
C,2016-01-02 
D,2013-06-01 
E,2014-06-01 
F,2016-06-01 

私が見てみたいエッジ構造はこのようになります:

A --> B --> C 
D --> E 
F 

さんは「myVertex」とエッジと頂点クラスを設定してみましょうクラスは "myEdge"になる? SQLインターフェイスを使用してこれらのエッジを生成することは可能ですか?

BEGIN 
LET source = SELECT FROM myVertex 
LET target = SELECT from myVertex 
LET edge = CREATE EDGE myEdge 
      FROM $source 
      TO (SELECT FROM $target WHERE $source.date.format('MM-dd') = $target.date.format('MM-dd') 
       AND $source.date.format('yyyy').asInteger() = $target.date.format('yyyy').asInteger()-1) 
COMMIT 

残念ながら、これは正しくありません:this questionに基づいて

は、私はこのような何かをしようとして始めました。だから私は、あまり野心的だと私はちょうど日の年の一致に基づいて、エッジを作成することができるかどうかを確認したかった。まだエラーが

BEGIN 
LET source = SELECT FROM myVertex 
LET target = SELECT from myVertex 
LET edge = CREATE EDGE myEdge FROM $source TO (SELECT FROM $target WHERE $source.date.format('MM-dd') = $target.date.format('MM-dd')) 
COMMIT 

...私はそれは、経験豊富なOrientDBにはかなり単純なものだと確信していますユーザー。

私はMichela suggested on this questionのようなJavaScript関数を組み合わせることを考えましたが、私はできるだけSQLコマンドを使用することに固執します。

お願いします。


他のスタックオーバーフローが

+0

JSサーバー側の機能を使用すると簡単になります。もしあなたがそれを助けたいのであれば教えてください。 –

+0

@ oleksandr-gubchenko私はこれのためのサーバー側の機能を探しています...機能の作成/使用の例をいくつかの良いドキュメントへのリンクはありますか? Javascriptのコードを多用してから数年経っています...もし私のスクリプトで 'V [i] .getRecord()。field( 'date')'を使ってレコードを引っ張っていたら、 [javascript date object](http://www.w3schools.com/jsref/jsref_obj_date.asp)を返すだけですか? 私はスタジオで実行することができますが、私はいくつかのコンソールインターフェイスからデータベースに追加および使用する方法を知りたいかもしれません。 – TxAG98

+0

Javascript APIの公式ドキュメント:http:// orientdbcom/docs/last/Javascript-Driver.html –

答えて

2

を参照し、私はOSQLバッチと試みたが、私はあなたが欲しいものを得ることができないと思います。 whis OSQLバッチ

begin 
let a = select @rid, $a1 as toAdd from test let $a1 = (select from test where date.format("MM") == $parent.$current.date.format("MM") and date.format("dd") == $parent.$current.date.format("dd") and @rid<>[email protected] and date.format("yyyy") == sum($parent.$current.date.format("yyyy").asInteger(),1)) 
commit 
return $a 

enter code here

私はこの enter image description here

を得たが、問題は、あなたがエッジを作成するときに、前にして得られたテーブル上のサイクルことができないということですステップ。 私は最良の解決策は、JSサーバー側の機能を使用することだと思います。 お手伝いをしてください。

+0

私はサーバー側の機能を実行できますが、すべての環境でサーバーを実行できない場合があります。私はちょうどエッジペアのテーブルを取得するクエリでそれを行うためにJavaコードに取り組んでいますし、私は別々に作成エッジを行うでしょう。この例では、以前にsum()関数とasInteger()メソッドを試していなかったので、助けになりました。私は、[OSQLの日付操作]に焦点を当てて少し野心的な質問を追加した(http://stackoverflow.com/questions/39713423/orientdb-date-manipulation-in-osql-to-find-a-path-with-nodes-同じ日に - しかし、)。これはそのことにとても役立ちました。ありがとう! – TxAG98

関連する問題