2016-08-09 1 views
0

VALUE 키워드를 운 임의의 다른 특정 필드와 결합하여 JSON 문서를 병합하려고합니다. 내가VALUE 키워드를 문서 DB의 다른 SELECT 요소와 결합하십시오.

SELECT c.id, c.name, c.timeZone, VALUE c.section1 FROM c 
와이를 조회 할 수 이론적으로

{ 
    "id": "Tenant-Test", 
    "name": "Test", 
    "timeZone": "Eastern Standard Time", 
    "section1Key1": "section 1 value 1", 
    "section1Key2": "section 1 value 2" 
} 

:

{ 
    "id": "Tenant-Test", 
    "name": "Test", 
    "timeZone": "Eastern Standard Time", 
    "section1": { 
     "section1Key1": "section 1 value 1", 
     "section1Key2": "section 1 value 2", 
     ... 
    }, 
    "section2": { 
     "section2Key1": "section 2 value 1" 
    } 
} 

나는 모양에있는 데이터의 하위 집합을 얻으려면 : 문서 DB 문서의 주어

'VALUE'근처에서 구문 오류가 발생합니다. 특정 필드 c.id, c.name, c.timeZone을 제거하면 c.section1을 병합 할 수 있습니다.

이 변환을 수행 할 수 있습니까?

답변

1

당신은 UDF와 함께이 작업을 수행 할 수 있습니다

function transform(o) { 
    output = {} 
    output.id = o.id 
    output.name = o.name 
    output.timeZone = o.timeZone 
    output.section1Key1 = o.section1.section1Key1 
    output.section1Key2 = o.section1.section1Key2 
    return output 
} 

당신은 모든 아무리 넓거나 깊은 평평 것이다 루프와 하드 코딩 된 부분 예측을 대체 할 수 있습니다.

는이 같은 쿼리에서 UDF를 사용

SELECT VALUE udf.transform(c) FROM collection c 

은 참고 예에서 키워드 VALUE 위 당신이 그것을 알아두면 각 문서에 이전에 추가 된 $ (1) 접두사를 억제한다.

+1

: (o.section1에서 VAR 키) { 경우에 대한 (o.section1.hasOwnProperty (키)) { 출력 [key] = o.section1 [key]; } } –

2

라빈의에 대한 대안 솔루션은 다음과 같습니다 : 이것은 다음과 같은 루프와 함께 작동

SELECT c.id, c.name, c.timeZone, c.section1.section1Key1 AS section1Key1, c.section1.section1Key2 AS section1Key2 
FROM c 
+0

이 방법이 효과적이지만, 제 질문에서 아이 부분의 내용을 미리 알지 못하는 것 같습니다. –

+0

Aravind가 그의 대답을 삭제 했습니까? 왜? –