2016-08-02 57 views
0

數組我有一個看起來是這樣的文件:放鬆在DocumentDB查詢

[ 
    { 
    "id": "e1bb9b05-11f2-459e-37d3-9bf9fed56c96", 
    "name": "bulbasaur", 
    "type": [ 
     { 
     "slot": 2, 
     "type": { 
      "url": "https://pokeapi.co/api/v2/type/4/", 
      "name": "poison" 
     } 
     }, 
     { 
     "slot": 1, 
     "type": { 
      "url": "https://pokeapi.co/api/v2/type/12/", 
      "name": "grass" 
     } 
     } 
    ] 
    } 
] 

下面的查詢是最接近我能得到的,但不太我希望的輸出。

查詢

SELECT 
    c.id, c.name, t.type.name as type 
FROM 
    c 
JOIN 
    t IN c.types 
WHERE 
    c.name = "bulbasaur" 

結果

[ 
    { 
    "id": "e1bb9b05-11f2-459e-37d3-9bf9fed56c96", 
    "name": "bulbasaur", 
    "type": "poison" 
    }, 
    { 
    "id": "e1bb9b05-11f2-459e-37d3-9bf9fed56c96", 
    "name": "bulbasaur", 
    "type": "grass" 
    } 
] 

盼望

[ 
    { 
    "id": "e1bb9b05-11f2-459e-37d3-9bf9fed56c96", 
    "name": "bulbasaur", 
    "types": ["poison", "grass"] 
    } 
] 

這可能與文檔數據庫查詢?

回答

1

這需要使用DocumentDB UDFs,它可以通過自定義轉換擴展查詢功能。例如,註冊這個:

function unwindTypeArray(value) { 
    var result = { id: value.id, name: value.name, types: []}; 
    for (var idx in value.type) { 
     console.log(idx); 
     var name = value.type[idx].type.name; 
     result.types.push(name); 
    } 

    return result; 
} 

然後調用它像一個查詢中:

SELECT udf.unwindTypeArray(c) FROM c WHERE c.name = "bulbasaur" 
+0

可能要補充一點,你可以創建UDF的從'Azure的門戶網站> DocumentDB>腳本explorer' –