Cloud Firestore fournit une fonctionnalité de requête puissante pour spécifier les documents que vous souhaitez récupérer à partir d'une collection. Ces requêtes peuvent également être utilisées avec get()
ou addSnapshotListener()
, comme décrit dans Get Data .
Données de commande et de limite
Par défaut, une requête récupère tous les documents qui satisfont la requête dans l'ordre croissant par ID de document. Vous pouvez spécifier l'ordre de tri de vos données à l'aide de orderBy()
, et vous pouvez limiter le nombre de documents récupérés à l'aide de limit()
.
Par exemple, vous pouvez interroger les 3 premières villes par ordre alphabétique avec :
Web version 9
import { query, orderBy, limit } from "firebase/firestore"; const q = query(citiesRef, orderBy("name"), limit(3));
Web version 8
citiesRef.orderBy("name").limit(3);
Rapide
citiesRef.order(by: "name").limit(to: 3)
Objectif c
[[citiesRef queryOrderedByField:@"name"] queryLimitedTo:3];
Kotlin+KTX
citiesRef.orderBy("name").limit(3)
Java
citiesRef.orderBy("name").limit(3);
Dart
final citiesRef = db.collection("cities"); citiesRef.orderBy("name").limit(3);
Java
Python
Python
C++
cities_ref.OrderBy("name").Limit(3);
Node.js
Va
PHP
PHP
Pour en savoir plus sur l'installation et la création d'un client Cloud Firestore, reportez-vous à Bibliothèques clientes Cloud Firestore .
Unité
Query query = citiesRef.OrderBy("Name").Limit(3);
C#
Rubis
Vous pouvez également trier par ordre décroissant pour obtenir les 3 dernières villes :
Web version 9
import { query, orderBy, limit } from "firebase/firestore"; const q = query(citiesRef, orderBy("name", "desc"), limit(3));
Web version 8
citiesRef.orderBy("name", "desc").limit(3);
Rapide
citiesRef.order(by: "name", descending: true).limit(to: 3)
Objectif c
[[citiesRef queryOrderedByField:@"name" descending:YES] queryLimitedTo:3];
Kotlin+KTX
citiesRef.orderBy("name", Query.Direction.DESCENDING).limit(3)
Java
citiesRef.orderBy("name", Direction.DESCENDING).limit(3);
Dart
final citiesRef = db.collection("cities"); citiesRef.orderBy("name", descending: true).limit(3);
Java
Python
Python
C++
cities_ref.OrderBy("name", Query::Direction::kDescending).Limit(3);
Node.js
Va
PHP
PHP
Pour en savoir plus sur l'installation et la création d'un client Cloud Firestore, reportez-vous à Bibliothèques clientes Cloud Firestore .
Unité
Query query = citiesRef.OrderByDescending("Name").Limit(3);
C#
Rubis
Vous pouvez également trier par plusieurs champs. Par exemple, si vous vouliez trier par état, et au sein de chaque état trier par population en ordre décroissant :
Web version 9
import { query, orderBy } from "firebase/firestore"; const q = query(citiesRef, orderBy("state"), orderBy("population", "desc"));
Web version 8
citiesRef.orderBy("state").orderBy("population", "desc");
Rapide
citiesRef .order(by: "state") .order(by: "population", descending: true)
Objectif c
[[citiesRef queryOrderedByField:@"state"] queryOrderedByField:@"population" descending:YES];
Kotlin+KTX
citiesRef.orderBy("state").orderBy("population", Query.Direction.DESCENDING)
Java
citiesRef.orderBy("state").orderBy("population", Direction.DESCENDING);
Dart
final citiesRef = db.collection("cities"); citiesRef.orderBy("state").orderBy("population", descending: true);
Java
Python
Python
C++
cities_ref.OrderBy("state").OrderBy("name", Query::Direction::kDescending);
Node.js
Va
PHP
PHP
Pour en savoir plus sur l'installation et la création d'un client Cloud Firestore, reportez-vous à Bibliothèques clientes Cloud Firestore .
Unité
Query query = citiesRef.OrderBy("State").OrderByDescending("Population");
C#
Rubis
Vous pouvez combiner les filtres where( where()
avec orderBy()
et limit()
. Dans l'exemple suivant, les requêtes définissent un seuil de population, trient par population dans l'ordre croissant et renvoient uniquement les premiers résultats qui dépassent le seuil :
Web version 9
import { query, where, orderBy, limit } from "firebase/firestore"; const q = query(citiesRef, where("population", ">", 100000), orderBy("population"), limit(2));
Web version 8
citiesRef.where("population", ">", 100000).orderBy("population").limit(2);
Rapide
citiesRef .whereField("population", isGreaterThan: 100000) .order(by: "population") .limit(to: 2)
Objectif c
[[[citiesRef queryWhereField:@"population" isGreaterThan:@100000] queryOrderedByField:@"population"] queryLimitedTo:2];
Kotlin+KTX
citiesRef.whereGreaterThan("population", 100000).orderBy("population").limit(2)
Java
citiesRef.whereGreaterThan("population", 100000).orderBy("population").limit(2);
Dart
final citiesRef = db.collection("cities"); citiesRef .where("population", isGreaterThan: 100000) .orderBy("population") .limit(2);
Java
Python
Python
C++
cities_ref.WhereGreaterThan("population", FieldValue::Integer(100000)) .OrderBy("population") .Limit(2);
Node.js
Va
PHP
PHP
Pour en savoir plus sur l'installation et la création d'un client Cloud Firestore, reportez-vous à Bibliothèques clientes Cloud Firestore .
Unité
Query query = citiesRef .WhereGreaterThan("Population", 2500000) .OrderBy("Population") .Limit(2);
C#
Rubis
Cependant, si vous avez un filtre avec une comparaison de plage ( <
, <=
, >
, >=
), votre premier tri doit être sur le même champ, voir la liste des limitations de orderBy()
ci-dessous.
Limites
Notez les restrictions suivantes pour les clauses orderBy()
:
- Une clause
orderBy()
filtre également l'existence des champs donnés. Le jeu de résultats n'inclura pas les documents qui ne contiennent pas les champs donnés. Si vous incluez un filtre avec une comparaison de plage (
<
,<=
,>
,>=
), votre premier tri doit être sur le même champ :Valide : Filtre de plage et
orderBy
sur le même champWeb version 9
import { query, where, orderBy } from "firebase/firestore"; const q = query(citiesRef, where("population", ">", 100000), orderBy("population"));
Web version 8
citiesRef.where("population", ">", 100000).orderBy("population");
Rapide
Remarque : ce produit n'est pas disponible sur les cibles watchOS et App Clip.citiesRef .whereField("population", isGreaterThan: 100000) .order(by: "population")
Objectif c
Remarque : ce produit n'est pas disponible sur les cibles watchOS et App Clip.[[citiesRef queryWhereField:@"population" isGreaterThan:@100000] queryOrderedByField:@"population"];
Kotlin+KTX
citiesRef.whereGreaterThan("population", 100000).orderBy("population")
Java
citiesRef.whereGreaterThan("population", 100000).orderBy("population");
Dart
final citiesRef = db.collection("cities"); citiesRef.where("population", isGreaterThan: 100000).orderBy("population");
Java
Query query = cities.whereGreaterThan("population", 2500000L).orderBy("population");
Python
Python
Node.js
Va
PHP
PHP
Pour en savoir plus sur l'installation et la création d'un client Cloud Firestore, reportez-vous à Bibliothèques clientes Cloud Firestore .
Unité
Query query = citiesRef .WhereGreaterThan("Population", 2500000) .OrderBy("Population");
C#
Rubis
Non valide : filtre de plage et premier
orderBy
sur différents champsWeb version 9
import { query, where, orderBy } from "firebase/firestore"; const q = query(citiesRef, where("population", ">", 100000), orderBy("country"));
Web version 8
citiesRef.where("population", ">", 100000).orderBy("country");
Rapide
Remarque : ce produit n'est pas disponible sur les cibles watchOS et App Clip.citiesRef .whereField("population", isGreaterThan: 100000) .order(by: "country")
Objectif c
Remarque : ce produit n'est pas disponible sur les cibles watchOS et App Clip.[[citiesRef queryWhereField:@"population" isGreaterThan:@100000] queryOrderedByField:@"country"];
Kotlin+KTX
citiesRef.whereGreaterThan("population", 100000).orderBy("country")
Java
citiesRef.whereGreaterThan("population", 100000).orderBy("country");
Dart
final citiesRef = db.collection("cities"); citiesRef.where("population", isGreaterThan: 100000).orderBy("country");
Java
Python
Python
C++
// BAD EXAMPLE -- will crash the program: cities_ref.WhereGreaterThan("population", FieldValue::Integer(100000)) .OrderBy("country");
Node.js
Va
PHP
PHP
Pour en savoir plus sur l'installation et la création d'un client Cloud Firestore, reportez-vous à Bibliothèques clientes Cloud Firestore .
Unité
Query query = citiesRef .WhereGreaterThan("Population", 2500000) .OrderBy("Country");
C#
Rubis
- Vous ne pouvez pas ordonner votre requête par n'importe quel champ inclus dans une égalité (
=
) ouin
une clause.