2016-12-14 5 views
0

In meiner Situation, Entreprise (Firma) kann mehrere Seiten (Filiales) haben, möchte ich alle Filiales mit Format-Array zu bekommen.Wie übergibt man eine Variable mit n1ql an Unterabfrage?

In der json entreprise (firma), gibt es keine informationen von websites (filiales), In den json sites (filiales), es hat entreprise (company) uid. Json entreprise (Gesellschaft):

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

Json Stellen (filiales):

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

Die Abfrage Ich habe versucht:

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"; 

Ergebnis: Fehler

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

Dann Ich benutze Alias:

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"; 

Ergebnis: Standorte Array ist leer.

Antwort

2

Zuerst müssen Sie einen Index auf Ihrer Website Dokumente erstellen:

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

dann Ihre Abfrage ändern, um den neuen Index zu verwenden:

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" 

Diese Lösung Ihre Anforderungen entsprechen sollte.

+0

Merci, es funktioniert. :) –

Verwandte Themen