2016-08-02 25 views
0

ich Dokumente, die wie folgt aussehen:Entspannen ein Array in DocumentDB Abfrage

[ 
    { 
    "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" 
     } 
     } 
    ] 
    } 
] 

Die folgende Abfrage in etwa so nah wie ich bekommen kann, aber nicht ganz die Ausgangs denn ich bin der Hoffnung.

Abfrage

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

Ergebnis

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

Hoffnung auf

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

Ist dies möglich, mit einem Dokument DB-Abfrage?

Antwort

1

Dies erfordert die Verwendung von DocumentDB UDFs, die Abfragefunktionalität mit benutzerdefinierten Transformationen erweitern können. Zum Beispiel, registrieren dies:

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

es dann in einer Abfrage nennen wie:

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

wollen könnte hinzufügen, dass Sie UDF aus dem 'Azure Portal erstellen> DocumentDB> Script explorer' –