Una query di aggregazione elabora i dati di più entità indicizzate per restituire un singolo valore riepilogativo. Firestore in modalità Datastore supporta le seguenti query di aggregazione:
count()
sum()
avg()
Le query di aggregazione semplificano il codice dell'applicazione e costano meno rispetto al recupero di ogni entità per l'elaborazione. Leggi questa pagina per scoprire come utilizzare le query di aggregazione.
count()
aggregazione
Utilizza l'aggregazione count()
per restituire il numero totale di entità indicizzate
che corrispondono a una determinata query. Ad esempio, questa aggregazione count()
restituisce il
numero totale di entità di un tipo.
Java
Python
Vai
aggregationCountQuery := datastore.NewQuery("Task"). NewAggregationQuery(). WithCount("total_tasks") countResults, err := client.RunAggregationQuery(ctx, aggregationCountQuery) count := countResults["total_tasks"] countValue := count.(*datastorepb.Value) fmt.Printf("Number of results from query: %d\n", countValue.GetIntegerValue())
GQL
AGGREGATE COUNT(*) AS total OVER ( SELECT * AS total FROM tasks )
GQL supporta una forma semplificata di query count()
:
SELECT COUNT(*) AS total FROM tasks
Questo esempio utilizza un alias facoltativo di total
.
Il modulo semplificato supporta solo le clausole FROM
e WHERE
. Per ulteriori informazioni, consulta le Informazioni di riferimento su GQL.
L'aggregazione count()
tiene conto di eventuali filtri nella query e di eventuali clausole limit
. Ad esempio, l'aggregazione seguente restituisce un conteggio del numero di entità che corrispondono ai filtri specificati.
Java
Python
Vai
aggregationCountQuery := datastore.NewQuery("Task"). FilterField("done", "=", true). NewAggregationQuery(). WithCount("total_tasks_done") countResults, err := client.RunAggregationQuery(ctx, aggregationCountQuery) count := countResults["total_tasks_done"] countValue := count.(*datastorepb.Value) fmt.Printf("Number of results from query: %d\n", countValue.GetIntegerValue())
GQL
AGGREGATE COUNT(*) OVER ( SELECT * FROM tasks WHERE is_done = false AND tag = 'house')
GQL supporta una forma semplificata di query count()
:
SELECT COUNT(*) AS total FROM tasks WHERE is_done = false AND tag = 'house'
Questo esempio utilizza un alias facoltativo di total
.
Il modulo semplificato supporta solo le clausole FROM
e WHERE
. Per ulteriori informazioni, consulta le Informazioni di riferimento su GQL.
Questo esempio mostra come contare fino a un determinato valore. Puoi utilizzarlo per, ad esempio, interrompere il conteggio a un determinato numero e informare gli utenti che hanno superato quel numero.
Java
Python
Vai
aggregationCountQuery := datastore.NewQuery("Task"). Limit(2). NewAggregationQuery(). WithCount("at_least") countResults, err := client.RunAggregationQuery(ctx, aggregationCountQuery) count := countResults["at_least"] countValue := count.(*datastorepb.Value) fmt.Printf("We have at least %d tasks\n", countValue.GetIntegerValue())
GQL
AGGREGATE COUNT_UP_TO(1000) OVER ( SELECT * FROM tasks WHERE is_done = false)
GQL supporta una forma semplificata di query count_up_to()
:
SELECT COUNT_UP_TO(1000) AS total FROM tasks WHERE is_done = false AND tag = 'house'
Questo esempio utilizza un alias facoltativo di total
.
Il modulo semplificato supporta solo le clausole FROM
e WHERE
. Per ulteriori informazioni, consulta le Informazioni di riferimento su GQL.
sum()
aggregazione
Utilizza l'aggregazione sum()
per restituire la somma totale dei valori numerici che corrispondono
a una determinata query. Ad esempio, il seguente sum()
aggregazione restituisce la somma totale dei valori numerici della proprietà specificata dalle
entità del tipo specificato:
Java
Python
Vai
aggregationSumQuery := datastore.NewQuery("Task"). NewAggregationQuery(). WithSum("hours", "total_hours") sumResults, err := client.RunAggregationQuery(ctx, aggregationSumQuery) sum := sumResults["total_hours"] sumValue := sum.(*datastorepb.Value) fmt.Printf("Sum of results from query: %d\n", sumValue.GetIntegerValue())
GQL
AGGREGATE SUM(hours) AS total_hours OVER ( SELECT * FROM tasks )
GQL supporta una forma semplificata di query sum()
:
SELECT SUM(hours) AS total_hours FROM tasks
Questo esempio utilizza un alias facoltativo di total_hours
.
Il modulo semplificato supporta solo le clausole FROM
e WHERE
. Per ulteriori informazioni, consulta le Informazioni di riferimento su GQL.
L'aggregazione sum()
tiene conto di eventuali filtri nella query e di eventuali clausole limit
. Ad esempio, l'aggregazione seguente restituisce una somma della proprietà specificata con un valore numerico nelle entità che corrispondono ai filtri specificati.
Java
Python
Questa query richiede un indice come:
- kind: Task properties: - name: done - name: hours
Vai
aggregationSumQuery := datastore.NewQuery("Task"). FilterField("done", "=", false). FilterField("tag", "=", "house"). NewAggregationQuery(). WithSum("hours", "total_hours") sumResults, err := client.RunAggregationQuery(ctx, aggregationSumQuery) sum := sumResults["total_hours"] sumValue := sum.(*datastorepb.Value) fmt.Printf("Sum of results from query: %d\n", sumValue.GetIntegerValue())
GQL
AGGREGATE SUM(hours) AS total_hours OVER ( SELECT * FROM tasks WHERE is_done = false AND tag = 'house' )
GQL supporta una forma semplificata di query sum()
:
SELECT SUM(hours) AS total_hours FROM tasks WHERE is_done = false AND tag = 'house'
Questo esempio utilizza un alias facoltativo di total_hours
.
Il modulo semplificato supporta solo le clausole FROM
e WHERE
. Per ulteriori informazioni, consulta le Informazioni di riferimento su GQL.
avg()
aggregazione
Utilizza l'aggregazione avg()
per restituire la media dei valori numerici che
corrispondono a una determinata query. Ad esempio, la seguente aggregazione avg()
restituisce la media
aritmetica della proprietà specificata dai valori delle proprietà numeriche delle entità
che corrispondono alla query: