CosmosDB: FROM Property

Sapevate che da una select effettuata in CosmosDB e’ possibile ottenere l’elenco dei valori associati ad una determinata property del tuo documento?

Modello Dati

Riprendiamo il modello dati del precedente articolo ( CosmosDB: JSON Expression ) con la struttura adatta ad accogliere i nostri customer.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
[
{
    "firstName": "Andrea",
    "lastName": "Carratta",
    "emailAddress": "bla -at- bla -dot- bla",
    "cellPhone": null,
    "id": "VGUofz0g30OHJg3UMSROZw=="
},
{
    "firstName": "Mario",
    "lastName": "Rossi",
    "emailAddress": "bla2 -at- bla2 -dot- bla",
    "cellPhone": null,
    "id": "IJ7HQJ2zlUaszRaKR81Xlg=="
}
]

Ho aggiunto un secondo customer per rendere piu’ semplice il passaggio seguente

SELECT FROM - classica

Ora, immaginiamo di volere mandare una email a tutti i nostri customer presenti in archivio.

1
SELECT c.emailAddress FROM c WHERE IS_DEFINED( c.emailAddress )

Ora -senza complicarci troppo la vita con campi extra- per mandare la mail dovremmo scorrere tutti i documenti ed ottenere il valore di emailAddress. Nel caso attuale il risultato ottenuto sara’ il seguente:

1
2
3
4
5
6
7
8
[
    {
        "emailAddress": "bla -at- bla -dot- bla"
    },
    {
        "emailAddress": "bla2 -at- bla2 -dot- bla"
    }
]

Pensate che sia la soluzione migliore per raggiungere il risultato?

FROM - Property

Esiste un altro modo per ottenere lo stesso risultato e secondo me e’ anche piu’ vantaggioso da gestire. TI stai chiedendo come? Quello che voglio mostrarti in questo breve articolo e’ come ottenere una lista delle email in un solo passaggio proiettando il valore di emailAddress direttamente e non del documento (o parte) che lo contiene. Pronto?

1
SELECT DISTINCT * FROM customers.emailAddress c 

Si, hai letto bene la query! Cosa faccio in questo modo?

  • nella from indico .
  • nella select indico * per tornare tutti i valori presenti
  • per evitare eventuali doppioni, li filtro gia’ a monte con una DISTINCT in modo da non doverlo fare via codice

Output

Cosa otterremo in uscita da questa select?

1
2
3
4
[
    "bla -at- bla -dot- bla",
    "bla2 -at- bla2 -dot- bla"
]

A questo punto potrete usare i dati come meglio credete e non dite che non vi ho avvisato di questo tips veramente utile ed interessante!