2016-08-09 9 views
0

VALUEキーワードと他の特定のフィールドを組み合わせて、JSON文書をフラット化しようとしています。私は文書DB内のVALUEキーワードと他の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(キー)) { 出力[キー] = o.section1 [キー]; } } –

2

Aravind者に対する代替解決策は以下の通りである:これは、次のループで動作

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

これはうまくいきますが、私の質問では、子供のセクションの内容が前もって分かりません。 –

+0

Aravindは彼の答えを削除しましたか?どうして? –

関連する問題