Ordenar y limitar datos
Firestore ofrece una potente función de consulta para especificar los documentos que quieres recuperar de una colección. Estas consultas también se pueden usar con get() o addSnapshotListener(), tal como se describe en Obtener datos.
Ordenar y limitar datos
De forma predeterminada, una consulta recupera todos los documentos que la cumplen en orden ascendente por ID de documento. Puedes especificar el orden de los datos mediante orderBy() y limitar el número de documentos recuperados mediante limit(). Si especifica un limit(), el valor debe ser igual o superior a cero.
Por ejemplo, puedes consultar las tres primeras ciudades por orden alfabético con la siguiente consulta:
Versión web 9
import { query, orderBy, limit } from "firebase/firestore"; const q = query(citiesRef, orderBy("name"), limit(3));
Versión web 8
citiesRef.orderBy("name").limit(3);
Swift
citiesRef.order(by: "name").limit(to: 3)
Objective‑C
[[citiesRef queryOrderedByField:@"name"] queryLimitedTo:3];
Kotlin
Android
citiesRef.orderBy("name").limit(3)
Java
Android
citiesRef.orderBy("name").limit(3);
Dart
final citiesRef = db.collection("cities"); citiesRef.orderBy("name").limit(3);
Java
Python
Python
(Async)
C++
cities_ref.OrderBy("name").Limit(3);
Node.js
Go
PHP
PHP
Para autenticarte en Firestore, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta el artículo Configurar la autenticación en un entorno de desarrollo local.
Unity
Query query = citiesRef.OrderBy("Name").Limit(3);
C#
Ruby
También puedes ordenar los resultados de forma descendente para obtener las últimas tres ciudades:
Versión web 9
import { query, orderBy, limit } from "firebase/firestore"; const q = query(citiesRef, orderBy("name", "desc"), limit(3));
Versión web 8
citiesRef.orderBy("name", "desc").limit(3);
Swift
citiesRef.order(by: "name", descending: true).limit(to: 3)
Objective‑C
[[citiesRef queryOrderedByField:@"name" descending:YES] queryLimitedTo:3];
Kotlin
Android
citiesRef.orderBy("name", Query.Direction.DESCENDING).limit(3)
Java
Android
citiesRef.orderBy("name", Direction.DESCENDING).limit(3);
Dart
final citiesRef = db.collection("cities"); citiesRef.orderBy("name", descending: true).limit(3);
Java
Python
Python
(Async)
C++
cities_ref.OrderBy("name", Query::Direction::kDescending).Limit(3);
Node.js
Go
PHP
PHP
Para autenticarte en Firestore, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta el artículo Configurar la autenticación en un entorno de desarrollo local.
Unity
Query query = citiesRef.OrderByDescending("Name").Limit(3);
C#
Ruby
También puedes ordenar los resultados por varios campos. Por ejemplo, si quieres ordenar por estado y, dentro de cada estado, por población en orden descendente, haz lo siguiente:
Versión web 9
import { query, orderBy } from "firebase/firestore"; const q = query(citiesRef, orderBy("state"), orderBy("population", "desc"));
Versión web 8
citiesRef.orderBy("state").orderBy("population", "desc");
Swift
citiesRef .order(by: "state") .order(by: "population", descending: true)
Objective‑C
[[citiesRef queryOrderedByField:@"state"] queryOrderedByField:@"population" descending:YES];
Kotlin
Android
citiesRef.orderBy("state").orderBy("population", Query.Direction.DESCENDING)
Java
Android
citiesRef.orderBy("state").orderBy("population", Direction.DESCENDING);
Dart
final citiesRef = db.collection("cities"); citiesRef.orderBy("state").orderBy("population", descending: true);
Java
Python
Python
(Async)
C++
cities_ref.OrderBy("state").OrderBy("name", Query::Direction::kDescending);
Node.js
Go
PHP
PHP
Para autenticarte en Firestore, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta el artículo Configurar la autenticación en un entorno de desarrollo local.
Unity
Query query = citiesRef.OrderBy("State").OrderByDescending("Population");
C#
Ruby
Puedes combinar filtros de where() con orderBy() y limit(). En el siguiente ejemplo, las consultas definen un umbral de población, ordenan los resultados por población en orden ascendente y devuelven solo los primeros resultados que superan el umbral:
Versión web 9
import { query, where, orderBy, limit } from "firebase/firestore"; const q = query(citiesRef, where("population", ">", 100000), orderBy("population"), limit(2));
Versión web 8
citiesRef.where("population", ">", 100000).orderBy("population").limit(2);
Swift
citiesRef .whereField("population", isGreaterThan: 100000) .order(by: "population") .limit(to: 2)
Objective‑C
[[[citiesRef queryWhereField:@"population" isGreaterThan:@100000] queryOrderedByField:@"population"] queryLimitedTo:2];
Kotlin
Android
citiesRef.whereGreaterThan("population", 100000).orderBy("population").limit(2)
Java
Android
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
(Async)
C++
cities_ref.WhereGreaterThan("population", FieldValue::Integer(100000)) .OrderBy("population") .Limit(2);
Node.js
Go
PHP
PHP
Para autenticarte en Firestore, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta el artículo Configurar la autenticación en un entorno de desarrollo local.
Unity
Query query = citiesRef .WhereGreaterThan("Population", 2500000) .OrderBy("Population") .Limit(2);
C#
Ruby
Sin embargo, si tiene un filtro con una comparación de intervalos (<, <=, >, >=), el primer orden debe ser del mismo campo. Consulte la lista de orderBy()limitaciones que se indica más abajo.
Limitaciones
Ten en cuenta la siguiente restricción para las cláusulas orderBy():
- Una cláusula
orderBy()también filtra por la existencia de los campos indicados. El conjunto de resultados no incluirá documentos que no contengan los campos indicados.
orderBy y existencia
Cuando ordenas una consulta por un campo determinado, la consulta solo puede devolver los documentos en los que exista el campo de ordenación.
Por ejemplo, la siguiente consulta no devolvería ningún documento en el que no se haya definido el campo population, aunque cumpla los filtros de la consulta.
Java
db.collection("cities").whereEqualTo("country", “USA”).orderBy(“population”);
Se aplica un efecto similar a las desigualdades. Una consulta con un filtro de desigualdad en un campo también implica ordenar por ese campo. La siguiente consulta no devuelve documentos sin el campo population, aunque country = USA esté en ese documento . Como solución alternativa, puedes ejecutar consultas independientes para cada orden o asignar un valor a todos los campos por los que ordenes.
Java
db.collection(“cities”).where(or(“country”, USA”), greaterThan(“population”, 250000));
La consulta anterior incluye una ordenación implícita por la desigualdad y es equivalente a la siguiente:
Java
db.collection(“cities”).where(or(“country”, USA”), greaterThan(“population”, 250000)).orderBy(“population”);