2016-12-14 4 views
0

필자의 경우 엔 entreprise (회사)가 여러 사이트 (filiales)를 가질 수 있으므로 모든 filial을 형식 배열로 가져오고 싶습니다.n1ql을 사용하여 변수를 하위 쿼리로 전달하는 방법은 무엇입니까?

json entreprise (회사)에는 사이트 (filiales)에 대한 정보가없고 json 사이트 (filiales)에는 entreprise (회사) uid가 있습니다. JSON의 ENTREPRISE (기업) :

{ 
    "type": "entreprise", 
    "dateUpdate": 1481716305279, 
    "owner": { 
    "type": "user", 
    "uid": "PNnqarPqSdaxmEJ4DoMv-A" 
    } 
} 

JSON 사이트 (filiales) :

{ 
    "type": "site", 
    "entreprise": { 
    "uid": "3c0CstzsTjqPdycL5yYzJQ", 
    "type": "entreprise" 
    }, 
    "nom": "test" 
} 

내가 노력 쿼리 :

SELECT 
      META(entreprise).id as uid, 
      ARRAY s FOR s IN (SELECT d.* FROM default d WHERE d.type = "site" AND d.entreprise.uid = uid) END as sites, 
      entreprise.* 
     FROM default entreprise 
     WHERE entreprise.type = "entreprise"; 

결과 : 다음 오류

{ 
    "code": 5010, 
    "msg": "Error evaluating projection. - cause: FROM in correlated subquery must have USE KEYS clause: FROM default." 
    } 

나는 별칭을 사용한다 :

SELECT 
    META(entreprise).id as uid, 
    ARRAY s FOR s IN (SELECT d.* FROM default d WHERE d.type = "site" AND d.entreprise.uid = META(entreprise).id) END as sites, 
    entreprise.* 
FROM default entreprise 
WHERE entreprise.type = "entreprise"; 

결과 : 사이트 배열이 비어 있습니다.

답변

2

먼저 귀하의 사이트 문서에 색인을 생성해야합니다 :이 솔루션은 사용자의 요구 사항을 충족해야

SELECT 
META(entreprise).id as uid, 
ARRAY s FOR s IN (
    SELECT site.* 
    FROM default as ent USE KEYS META(entreprise).id 
    JOIN default as site ON KEY site.entreprise.uid FOR ent 
) END as sites, 
entreprise.* 
FROM default entreprise 
WHERE entreprise.type = "entreprise" 

:

CREATE INDEX site_ent_idx ON default(entreprise.uid) WHERE type="site"; 

그런 다음 새로운 인덱스를 사용하도록 쿼리를 변경합니다.

+0

Merci, 작동합니다. :) –