DocumentDB SQL - Iteración
En DocumentDB SQL, Microsoft ha agregado una nueva construcción que se puede usar con la palabra clave IN para brindar soporte para iterar sobre matrices JSON. El soporte para la iteración se proporciona en la cláusula FROM.
Consideraremos tres documentos similares de los ejemplos anteriores nuevamente.
Lo siguiente es el AndersenFamily documento.
{
"id": "AndersenFamily",
"lastName": "Andersen",
"parents": [
{ "firstName": "Thomas", "relationship": "father" },
{ "firstName": "Mary Kay", "relationship": "mother" }
],
"children": [
{
"firstName": "Henriette Thaulow",
"gender": "female",
"grade": 5,
"pets": [ { "givenName": "Fluffy", "type": "Rabbit" } ]
}
],
"location": { "state": "WA", "county": "King", "city": "Seattle" },
"isRegistered": true
}
Lo siguiente es el SmithFamily documento.
{
"id": "SmithFamily",
"parents": [
{ "familyName": "Smith", "givenName": "James" },
{ "familyName": "Curtis", "givenName": "Helen" }
],
"children": [
{
"givenName": "Michelle",
"gender": "female",
"grade": 1
},
{
"givenName": "John",
"gender": "male",
"grade": 7,
"pets": [
{ "givenName": "Tweetie", "type": "Bird" }
]
}
],
"location": {
"state": "NY",
"county": "Queens",
"city": "Forest Hills"
},
"isRegistered": true
}
Lo siguiente es el WakefieldFamily documento.
{
"id": "WakefieldFamily",
"parents": [
{ "familyName": "Wakefield", "givenName": "Robin" },
{ "familyName": "Miller", "givenName": "Ben" }
],
"children": [
{
"familyName": "Merriam",
"givenName": "Jesse",
"gender": "female",
"grade": 6,
"pets": [
{ "givenName": "Charlie Brown", "type": "Dog" },
{ "givenName": "Tiger", "type": "Cat" },
{ "givenName": "Princess", "type": "Cat" }
]
},
{
"familyName": "Miller",
"givenName": "Lisa",
"gender": "female",
"grade": 3,
"pets": [
{ "givenName": "Jake", "type": "Snake" }
]
}
],
"location": { "state": "NY", "county": "Manhattan", "city": "NY" },
"isRegistered": false
}
Echemos un vistazo a un ejemplo simple sin la palabra clave IN en la cláusula FROM.
A continuación se muestra la consulta que devolverá todos los padres de la colección Familias.
SELECT *
FROM Families.parents
Cuando se ejecuta la consulta anterior, produce el siguiente resultado.
[
[
{
"familyName": "Wakefield",
"givenName": "Robin"
},
{
"familyName": "Miller",
"givenName": "Ben"
}
],
[
{
"familyName": "Smith",
"givenName": "James"
},
{
"familyName": "Curtis",
"givenName": "Helen"
}
],
[
{
"firstName": "Thomas",
"relationship": "father"
},
{
"firstName": "Mary Kay",
"relationship": "mother"
}
]
]
Como se puede ver en el resultado anterior, los padres de cada familia se muestran en una matriz JSON separada.
Echemos un vistazo al mismo ejemplo, sin embargo, esta vez usaremos la palabra clave IN en la cláusula FROM.
A continuación se muestra la consulta que contiene la palabra clave IN.
SELECT *
FROM c IN Families.parents
Cuando se ejecuta la consulta anterior, produce el siguiente resultado.
[
{
"familyName": "Wakefield",
"givenName": "Robin"
},
{
"familyName": "Miller",
"givenName": "Ben"
},
{
"familyName": "Smith",
"givenName": "James"
},
{
"familyName": "Curtis",
"givenName": "Helen"
},
{
"firstName": "Thomas",
"relationship": "father"
},
{
"firstName": "Mary Kay",
"relationship": "mother"
}
{
"id": "WakefieldFamily",
"givenName": "Jesse",
"grade": 6
}
]
En el ejemplo anterior, se puede ver que con la iteración, la consulta que realiza la iteración sobre los padres en la colección tiene una matriz de salida diferente. Por lo tanto, todos los padres de cada familia se agregan a una sola matriz.