Ordinare e limitare i dati
Firestore fornisce una potente funzionalità di query per specificare i documenti che vuoi recuperare da una raccolta. Queste query possono essere utilizzate
con get() o addSnapshotListener(), come descritto in Recupera
dati.
Ordinare e limitare i dati
Per impostazione predefinita, una query recupera tutti i documenti che soddisfano la query in ordine
crescente in base all'ID documento. Puoi specificare l'ordinamento dei dati utilizzando
orderBy() e puoi limitare il numero di documenti recuperati utilizzando
limit(). Se specifichi un limit(), il valore deve essere maggiore o uguale a zero.
Ad esempio, puoi eseguire una query per le prime tre città in ordine alfabetico con:
Versione web 9
import { query, orderBy, limit } from "firebase/firestore"; const q = query(citiesRef, orderBy("nam);order_and_limit.js
Versione web 8
citiesRef.orderBy("name")restore.js
Swift
citiesRef.order(by: "name").liller.swift
Objective-C
[[citiesRef queryOrderedByField:@"name"] queryLimntroller.m
Kotlin
Android
citiesRef.orderBy("name"nippets.kt
Java
Android
citiesRef.orderBy("name")ppets.java
Freccette
final citiesRef = db.collection("cities"); citiesRef.orderBy("nit(3);firestore.dart
Java
Python
Python
(Async)
C++
cities_ref.OrderBy("name")ippets.cpp
Node.js
Go
PHP
PHP
Per eseguire l'autenticazione in Firestore, configura le credenziali predefinite dell'applicazione. Per ulteriori informazioni, vedi Configura l'autenticazione per un ambiente di sviluppo locale.
Unity
Query query = citiesRef.OrderBy("Name").Limit(3);
C#
Ruby
Puoi anche ordinare in ordine decrescente per ottenere le ultime 3 città:
Versione web 9
import { query, orderBy, limit } from "firebase/firestore"; const q = query(citiesRef, orderBy("name",it(3));order_and_limit_desc.js
Versione web 8
citiesRef.orderBy("name", "d3);test.firestore.js
Swift
citiesRef.order(by: "name", descending: true).liller.swift
Objective-C
[[citiesRef queryOrderedByField:@"name" descending:YES] queryLimntroller.m
Kotlin
Android
citiesRef.orderBy("name", Query.Direction.DESCENDINGnippets.kt
Java
Android
citiesRef.orderBy("name", Direction.DESCENDING)ppets.java
Freccette
final citiesRef = db.collection("cities"); citiesRef.orderBy("name", descendit(3);firestore.dart
Java
Python
Python
(Async)
C++
cities_ref.OrderBy("name", Query::Direction::kDescending)ippets.cpp
Node.js
Go
PHP
PHP
Per eseguire l'autenticazione in Firestore, configura le credenziali predefinite dell'applicazione. Per ulteriori informazioni, vedi Configura l'autenticazione per un ambiente di sviluppo locale.
Unity
Query query = citiesRef.OrderByDescending("Name").Limit(3);
C#
Ruby
Puoi anche ordinare i dati in base a più campi. Ad esempio, se vuoi ordinare per stato e, all'interno di ogni stato, ordinare per popolazione in ordine decrescente:
Versione web 9
import { query, orderBy } from "firebase/firestore"; const q = query(citiesRef, orderBy("state"), orderBy(&qut;, "desc"));order_multiple.js
Versione web 8
citiesRef.orderBy("state").orderBy("popula;desc");test.firestore.js
Swift
citiesRef .order(by: "state") .order(by: "population"ViewController.swift
Objective-C
[[citiesRef queryOrderedByField:@"state"] queryOrderedByField:@"population&quES];ViewController.m
Kotlin
Android
citiesRef.orderBy("state").orderBy("population", Query.DNDING)DocSnippets.kt
Java
Android
citiesRef.orderBy("state").orderBy("population", DiNG);DocSnippets.java
Freccette
final citiesRef = db.collection("cities"); citiesRef.orderBy("state").orderBy("populascending: true);firestore.dart
Java
Python
Python
(Async)
C++
cities_ref.OrderBy("state").OrderBy("name", Query::Direending);snippets.cpp
Node.js
Go
PHP
PHP
Per eseguire l'autenticazione in Firestore, configura le credenziali predefinite dell'applicazione. Per ulteriori informazioni, vedi Configura l'autenticazione per un ambiente di sviluppo locale.
Unity
Query query = citiesRef.OrderBy("State").OrderByDescending("Population");
C#
Ruby
Puoi combinare i filtri where() con orderBy() e limit(). Nell'esempio
seguente, le query definiscono una soglia della popolazione, ordinano in base alla popolazione
in ordine crescente e restituiscono solo i primi risultati che superano la
soglia:
Versione web 9
import { query, where, orderBy, limit } from "firebase/firestore"; const q = query(citiesRef, where(">;population", "", 100000), ordon"), limit(2));filter_and_order.js
Versione web 8
citiesRef.where("populatio>n", "", 100000).orderBy(&qut;).limit(2);test.firestore.js
Swift
citiesRef .whereField("population", isGreaterThan: 100000) .order(by: "population&quViewController.swift
Objective-C
[[[citiesRef queryWhereField:@"population" isGreaterThan:@100000] queryOrderedByField:@"population"] :2];ViewController.m
Kotlin
Android
citiesRef.whereGreaterThan("population", 100000).orderBy("populamit(2)DocSnippets.kt
Java
Android
citiesRef.whereGreaterThan("population", 100000).orderBy("populat(2);DocSnippets.java
Freccette
final citiesRef = db.collection("cities"); citiesRef .where("population", isGreaterThan: 100000) .orderBy("po) .limit(2);firestore.dart
Java
Python
Python
(Async)
C++
cities_ref.WhereGreaterThan("population", FieldValue::Integer(100000)) .OrderBy("population&qimit(2);snippets.cpp
Node.js
Go
PHP
PHP
Per eseguire l'autenticazione in Firestore, configura le credenziali predefinite dell'applicazione. Per ulteriori informazioni, vedi Configura l'autenticazione per un ambiente di sviluppo locale.
Unity
Query query = citiesRef .WhereGreaterThan("Population", 2500000) .OrderBy("Population") .Limit(2);
C#
Ruby
Tuttavia, se hai un filtro con un confronto di intervallo (<, <=, >, >=),
il primo ordinamento deve essere nello stesso campo. Consulta l'elenco delle limitazioni orderBy()
di seguito.
Limitazioni
Tieni presente la seguente limitazione per le clausole orderBy():
- Una clausola
orderBy()filtra anche l'esistenza dei campi specificati. Il set di risultati non includerà i documenti che non contengono i campi specificati.
orderBy ed esistenza
Quando ordini una query in base a un determinato campo, la query può restituire solo i documenti in cui esiste il campo di ordinamento.
Ad esempio, la seguente query non restituirebbe alcun documento in cui il campo
population non è impostato, anche se soddisfano altrimenti i filtri della query.
Java
db.collection("cities").whereEqualTo("country", “USA”).orderBy(“population”);
Un effetto correlato si applica alle disuguaglianze. Una query con un filtro di disuguaglianza
su un campo implica anche l'ordinamento in base a quel campo. La seguente query non restituisce documenti senza un campo population anche se country = USA in quel documento . Come soluzione alternativa, puoi eseguire query separate per ogni ordinamento oppure assegnare un valore a tutti i campi in base ai quali esegui l'ordinamento.
Java
db.collection(“cities”).where(or(“country”, USA”), greaterThan(“population”, 250000));
La query precedente include un ordinamento implicito sulla disuguaglianza ed è equivalente alla seguente:
Java
db.collection(“cities”).where(or(“country”, USA”), greaterThan(“population”, 250000)).orderBy(“population”);