2017-08-17 2 views
0

Considérez ces deux exemples de documents stockés dans DocumentDB.Sélection de la clé et de la valeur du dictionnaire dans Azure DocumentDB/Azure CosmosDB

document 1

"JobId": "04e63d1d-2af1-42af-a349-810f55817602", 
"JobType": 3, 
" 
"Properties": { 
    "Key1": "Value1", 
    "Key2": "Value2" 
    } 
"KeyNames": ["Key1", "Key2"] 

Document de 2

"JobId": "04e63d1d-2af1-42af-a349-810f55817603", 
"JobType": 4, 
" 
"Properties": { 
    "Key3": "Value3", 
    "Key4": "Value4" 
    } 
"KeyNames": ["Key3", "Key4"] 

Je veux sélectionner les toutes les clés et toutes les valeurs dans l'objet Propriétés pour chaque document. Quelque chose comme:

SELECT 
c.JobId, 
c.JobType, 
c.Properties.<Keys> AS Keys, 
c.Properties.<Values> AS Values 
FROM c 

Mais comme vous pouvez voir les clés ne sont pas fixes. Alors, comment puis-je les lister? Donc, finalement, je reçois un résultat comme celui-ci. Je ne peux pas utiliser .NET ou LINQ. J'ai besoin d'une requête à exécuter dans l'explorateur de requêtes DocumentDB.

[ 
{ 
"JobId": "04e63d1d-2af1-42af-a349-810f55817602", 
"JobType": 3, 
"Key1": "Value1" 
} 

{ 
"JobId": "04e63d1d-2af1-42af-a349-810f55817602", 
"JobType": 3, 
"Key2": "Value2" 
} 

{ 
"JobId": "04e63d1d-2af1-42af-a349-810f55817603", 
"JobType": 4, 
"Key3": "Value3" 
} 

{ 
"JobId": "04e63d1d-2af1-42af-a349-810f55817603", 
"JobType": 4, 
"Key4": "Value4" 
} 
] 

Répondre

0

J'ai été capable de résoudre mon problème en utilisant UDF dans DocumentDB. Depuis KeyNames est un tableau. L'auto-jointement renvoyait la clé.

Donc, cette requête.

SELECT 
c.JobId, 
c.JobType, 
Key, 
udf.GetValueUsingKey(c.Properties, Key) AS Value 
FROM collection AS c 
JOIN Key in c.KeyNames 

m'a renvoyé le résultat souhaité.

Vous pouvez définir UDF à l'aide de l'Explorateur de scripts fourni dans DocumentDB. Pour mon but, j'utilisé:

function GetValueUsingKey(Properties, Key) { 
    var result = Properties[Key]; 
    return JSON.stringify(result); 
} 

Hope this helps :)