2017-12-28 22 views
0

私はOrientDBを初めて使い、内部使用のためのテストアプリケーション(orientdb 2.2.17)を開発中です。OrientDB - サブクエリとリレーションシップを持つドキュメントを作成する

サブクエリを値の1つとして持つ新しいドキュメントをクラスに追加しようとしています。

クラス:

CREATE CLASS Website 
CREATE PROPERTY Website.id String 
CREATE PROPERTY Website.name String 
CREATE PROPERTY Website.created DateTime 

CREATE CLASS User 
CREATE PROPERTY UserEndpoint.id String 
CREATE PROPERTY UserEndpoint.website String 
CREATE PROPERTY UserEndpoint.created DateTime 

私はいくつかのウェブサイトを参照して、新しいユーザーを追加しようとしています。例えば

INSERT INTO Website (name) VALUES ('localhost:8090') 

、その後ユーザーを追加するには:結果は、私が期待していたものではないです

INSERT INTO User (website) VALUES (SELECT id FROM Website WHERE) 
OR 
INSERT INTO User (website) VALUES (SELECT @rid FROM Website WHERE) 

User.websiteパラメータではなく、配列を表す文字列であります単一の値を表す文字列を返します。

{ 
    "result": [ 
     { 
      "@type": "d", 
      "@rid": "#30:0", 
      "@version": 1, 
      "@class": "User", 
      "created": "2017-12-28T16:35:31", 
      "id": "a9816adc-8808-4673-b5a7-b11493b0ce36", 
      "website": "[Website#25:0{created:Thu Dec 28 16:34:25 UTC 2017,id:e0ce0e68-003b-4a01-8c4f-856d9eeb6125,name:localhost:56} v1]" 
     } 
    ] 
    "notification": "..." } 

予想:

{ 
    "result": [ 
     { 
      "@type": "d", 
      "@rid": "#30:0", 
      "@version": 1, 
      "@class": "User", 
      "created": "2017-12-28T16:35:31", 
      "id": "a9816adc-8808-4673-b5a7-b11493b0ce36", 
      "website": "#25:0" 
     } 
    ] 
    "notification": "..." } 

そして私はまた、ウェブサイトや、ユーザー(使用者がユーザーの多くを持っているかもしれない1つのウェブサイトやウェブサイトに属している)との関係を作りたい、これが正しい方法です:

CREATE LINK websiteUsers TYPE LINKSET FROM User.website TO Website.rid 

私はユーザーを照会しているが、ウェブサイトの詳細を取得したいが、自動的に追加するのか?

答えて

0

あなたはリンクとしてではなく、文字列としてwebsiteプロパティを作成する必要があります。

CREATE PROPERTY UserEndpoint.website LINK Website 

これは、あなたが照会することができ、実際のリンクになります。

別の方法として、あなたは、エッジ(グラフモデル)

CREATE CLASS Website EXTENDS V 
CREATE CLASS User EXTENDS V 
CREATE CLASS HasWebsite EXTENDS E 

INSERT INTO User (name) VALUES ('foo') 
INSERT INTO Website (name) VALUES ('localhost:8090') 
CREATE EDGE HasWebsite FROM (SELECT FROM User WHERE name = 'foo') TO (SELECT FROM Website WHERE name = 'localhost:8090') 

とのリンクを交換し、その後、次のようにそれを照会することができます

get the website for a user: 

SELECT expand(out("HasWebsite")) FROM User WHERE name = ?