tutorial que pricing prices azure-cosmosdb nosql

azure cosmosdb - que - Cláusula WHERE en una matriz en Azure DocumentDb



cosmos db vs mongodb (2)

En un documento de Azure Documentdb como este

{ "id": "WakefieldFamily", "parents": [ { "familyName": "Wakefield", "givenName": "Robin" }, { "familyName": "Miller", "givenName": "Ben" } ], "children": [ { "familyName": "Merriam", "givenName": "Jesse", "gender": "female", "grade": 1, "pets": [ { "givenName": "Goofy" }, { "givenName": "Shadow" } ] }, { "familyName": "Miller", "givenName": "Lisa", "gender": "female", "grade": 8 } ], "address": { "state": "NY", "county": "Manhattan", "city": "NY" }, "isRegistered": false };

¿Cómo puedo consultar para obtener niños cuyos nombres de mascotas son "Goofy"?

Parece que la siguiente sintaxis no es válida

Select * from root r WHERE r.children.pets.givenName="Goofy"

En cambio necesito hacer

Select * from root r WHERE r.children[0].pets[0].givenName="Goofy"

que no está realmente buscando a través de una matriz.

¿Alguna sugerencia sobre cómo debo manejar consultas como estas?


Creo que la función ARRAY_CONTAINS ha cambiado desde que se contestó en 2014. Tenía que usar lo siguiente para que funcionara.

SELECT * FROM c WHERE ARRAY_CONTAINS(c.Samples, {TimeBasis:"5MIN_AV", "Value":"5.105"},true)

Samples es mi matriz JSON y contiene objetos con muchas propiedades, incluidas las dos anteriores.


Debe aprovechar las ventajas de la cláusula JOIN de DocumentDB, que funciona de forma un poco diferente a JOIN en RDBMs (ya que DocumentDB trata con un modelo de datos no estructurado de documentos sin esquema).

En pocas palabras, puede pensar que la combinación de DocumentDB es una auto-unión que se puede usar para formar productos cruzados entre objetos JSON anidados.

En el contexto de consultar a los niños cuyas mascotas reciben el nombre de "Goofy", puede intentar:

SELECT f.id AS familyName, c AS child, p.givenName AS petName FROM Families f JOIN c IN f.children JOIN p IN c.pets WHERE p.givenName = "Goofy"

Que devuelve:

[{ familyName: WakefieldFamily, child: { familyName: Merriam, givenName: Jesse, gender: female, grade: 1, pets: [{ givenName: Goofy }, { givenName: Shadow }] }, petName: Goofy }]

Referencia: http://azure.microsoft.com/en-us/documentation/articles/documentdb-sql-query/

Editar:

También puede usar la función ARRAY_CONTAINS , que se parece a esto:

SELECT food.id, food.description, food.tags FROM food WHERE food.id = "09052" or ARRAY_CONTAINS(food.tags.name, "blueberries")