2016-09-02 2 views
0

에서 나는 다음 왼쪽 외부를 수행하기 위해 인덱스를 생성 한 가입하는 것은 N1ql에 참여 : 그 특정 사용자에 대한 주문이있을 때이 잘 작동이 N1QL

CREATE INDEX idx_test ON bucket("User::" || userId) WHERE docType="Order"; 

SELECT u.*, ARRAY_AGG(o) as orders 
FROM bucket AS u 
LEFT OUTER JOIN bucket AS o ON KEY "User::" || o.userId FOR u 
WHERE u.docType="User" 
AND o.docType="Order" 
GROUP BY u; 

. 문제는 내가 명령을받지 못했을 때 전혀 결과가 없다는 것입니다.

쿼리에서 AND o.docType="Order" 문을 제거하면 결과가 나타납니다. 그러나 userId 속성을 가진 문서가 있으면 어떻게됩니까? 어떻게하면 제대로 작동합니까?

+0

표준 SQL에서는'AND o.docType = "Order"조건을 (where of out) 조인 조건으로 이동해야합니다. 나는 거기에 조인 절에서 하나 이상의 조건을 어떻게 지정하는지 모르기 때문에 n1ql을 모른다. –

+0

N1QL이 JOIN 문에서 여러 조건을 허용하지 않는다고 생각합니다 (http://developer.couchbase.com/documentation/server/current/n1ql/n1ql-language-reference/from.html#story-h2-3). 그러나 제안에 감사드립니다. –

+1

그런 다음'AND (o.docType = "Order"또는 o.docType IS NULL)와 같은 것이 필요합니다. –

답변

1

@a_horse_with_no_name은 본질적으로 정확합니다. IS NULL 대신 IS MISSING을 사용하십시오.

AND (o.docType="Order" OR o.docType IS MISSING) 
+0

@geraldss에 감사드립니다. 확실히이 접근법은 모든 문서가'docType'을 가지며'userId'에 대한 참조를 가지고 있지 않은지, 맞습니까? –

+0

아니요,이 방법은 의무가 없습니다. 항상 schemaless. – geraldss

+0

안녕하세요. @ geraldss. 어떤 이유로, 이것은 특정 경우에 작동하지 않습니다. 지금은 내 버킷에'docType = "User"'문서 만 있습니다. 즉,'주문 '이 없습니다. 질문에 제시된 쿼리를 제안과 함께 표시하면 빈 결과 집합이 반환됩니다. 이것은 예상 된 행동입니까? –