2017-12-28 2 views
0

OrientDB를 처음 사용하고 내부 용 테스트 응용 프로그램 (orientdb 2.2.17)을 개발 중입니다.OrientDB - 하위 쿼리 및 관계가있는 문서 작성

하위 쿼리를 값으로 사용하여 클래스에 새 문서를 추가하려고합니다.

클래스 :

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": "..." } 

그리고 나는 또한 웹 사이트 및 사용자 (사용자가 많은 사용자가있을 수 있습니다 하나 개의 웹 사이트 및 웹 사이트에 속하는) 사이의 관계를 만들고 싶어, 이것은 올바른 방법입니다 :

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 = ? 
관련 문제