2017-07-17 1 views
0

J'ai une collection documentDB qui ressemble à cet exemple:SELECT seul champ de tableau intégré dans documentDB azur

{ 
    "data1": "hello", 
    "data2": [ 
     { 
      "key": "key1", 
      "value": "value1" 
     }, 
     { 
      "key": "key2", 
      "value": "value2" 
     } 
} 

En réalité, les données ont beaucoup d'autres domaines et le tableau intégré a des domaines dans lesquels les données est assez grand. J'ai besoin d'interroger les données et je me soucie du petit champ "clé" dans le tableau data2 mais je n'ai pas besoin de la grande "valeur". Je trouve que le retour de toutes les données de valeur cause des problèmes de performance, mais si j'exclue les données de tableau du SELECT ensemble, c'est rapide (donc la taille des données est le problème).

Je n'arrive pas à trouver un moyen de retourner uniquement la "clé" mais à exclure la "valeur" dans le tableau incorporé.

Je veux essentiellement SELECT r.data1, r.data2.key et de l'avoir de retour si:

{ 
    "data1": "hello", 
    "data2": [ 
     { 
      "key": "key1" 
     }, 
     { 
      "key": "key2" 
     } 
} 

mais il ne semble pas possible de sélectionner r.data2.key car il est dans un tableau

Jointure le fera revenir un copie de chaque document pour chaque élément de tableau "data2", ce qui ne fonctionne pas pour moi. Ma seule autre option serait de migrer les données et de mettre les données que je veux dans son propre tableau afin que je puisse sélectionner l'objet entier.

Est-ce possible d'une certaine façon que je n'ai pas pu comprendre?

Répondre

1

Mike,

Comme vous l'avez deviné, ce n'est pas possible sans UDF personnalisé jusqu'à ce que DocumentDB prend en charge les sous-requêtes. Si vous voulez aller dans cette voie, voir la réponse suivante pour un exemple de la façon dont l'UDF peut avoir à regarder:

Bonne chance!