Cloud Firestore proporciona una potente función de consulta para especificar qué documentos deseas recuperar de una colección. Estas consultas también se pueden usar con get()
o addSnapshotListener()
, como se describe en cómo obtener datos.
Ordena y limita los datos
Según la configuración predeterminada, una consulta recupera todos los documentos que corresponden con la consulta en orden ascendente
por ID de documento. Puedes especificar el orden de clasificación para tus datos
mediante orderBy()
y, con limit()
, puedes limitar la cantidad de documentos
recuperados. Si especificas un limit()
, el valor debe ser mayor o igual
que cero.
Por ejemplo, puedes realizar una consulta que te muestre las primeras 3 ciudades en orden alfabético con:
API modular web
import { query, orderBy, limit } from "firebase/firestore"; const q = query(citiesRef, orderBy("name"), limit(3));
API con espacio de nombres web
citiesRef.orderBy("name").limit(3);
Swift
citiesRef.order(by: "name").limit(to: 3)
Objective‑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
Go
PHP
PHP
Para obtener más información sobre la instalación y creación de un cliente de Cloud Firestore, consulta las bibliotecas cliente de Cloud Firestore.
Unity
Query query = citiesRef.OrderBy("Name").Limit(3);
C#
Ruby
También puedes ordenar de forma descendente para ver las últimas 3 ciudades:
API modular web
import { query, orderBy, limit } from "firebase/firestore"; const q = query(citiesRef, orderBy("name", "desc"), limit(3));
API con espacio de nombres web
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+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
Go
PHP
PHP
Para obtener más información sobre la instalación y creación de un cliente de Cloud Firestore, consulta las bibliotecas cliente de Cloud Firestore.
Unity
Query query = citiesRef.OrderByDescending("Name").Limit(3);
C#
Ruby
También puedes ordenar según varios campos. Por ejemplo, si quieres ordenar por estado y, dentro de cada estado, por población de manera descendente, usa este código:
API modular web
import { query, orderBy } from "firebase/firestore"; const q = query(citiesRef, orderBy("state"), orderBy("population", "desc"));
API con espacio de nombres web
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+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
Go
PHP
PHP
Para obtener más información sobre la instalación y creación de un cliente de Cloud Firestore, consulta las bibliotecas cliente de Cloud Firestore.
Unity
Query query = citiesRef.OrderBy("State").OrderByDescending("Population");
C#
Ruby
Puedes combinar filtros where()
con orderBy()
y limit()
. En los
siguientes ejemplos, las consultas definen un umbral de población, clasifican por población
en orden ascendente y muestran solo los primeros resultados que superan el
umbral:
API modular web
import { query, where, orderBy, limit } from "firebase/firestore"; const q = query(citiesRef, where("population", ">", 100000), orderBy("population"), limit(2));
API con espacio de nombres web
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+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
Go
PHP
PHP
Para obtener más información sobre la instalación y creación de un cliente de Cloud Firestore, consulta las bibliotecas cliente de Cloud Firestore.
Unity
Query query = citiesRef .WhereGreaterThan("Population", 2500000) .OrderBy("Population") .Limit(2);
C#
Ruby
Sin embargo, si tienes un filtro con una comparación de rangos (<
, <=
, >
y >=
), el primer ordenamiento debe estar en el mismo campo. Consulta la lista de limitaciones de orderBy()
a continuación.
Limitaciones
Ten en cuenta las siguientes restricciones para las cláusulas orderBy()
:
- Una cláusula
orderBy()
también filtra en busca de los campos especificados. El conjunto de resultados no incluirá documentos que no contengan los campos correspondientes. -
Si incluyes un filtro con una comparación de rangos (
<
,<=
,>
y>=
), el primer ordenamiento debe estar en el mismo campo:Válido: Filtro de rango y
orderBy
en el mismo campoAPI modular web
import { query, where, orderBy } from "firebase/firestore"; const q = query(citiesRef, where("population", ">", 100000), orderBy("population"));
API con espacio de nombres web
citiesRef.where("population", ">", 100000).orderBy("population");
Swift
Nota: Este producto no se encuentra disponible en los destinos de watchOS ni de App Clips.citiesRef .whereField("population", isGreaterThan: 100000) .order(by: "population")
Objective‑C
Nota: Este producto no se encuentra disponible en los destinos de watchOS ni de App Clips.[[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
Go
PHP
PHP
Para obtener más información sobre la instalación y creación de un cliente de Cloud Firestore, consulta las bibliotecas cliente de Cloud Firestore.
Unity
Query query = citiesRef .WhereGreaterThan("Population", 2500000) .OrderBy("Population");
C#
Ruby
No válido: Filtro de rango y primer
orderBy
en campos distintosAPI modular web
import { query, where, orderBy } from "firebase/firestore"; const q = query(citiesRef, where("population", ">", 100000), orderBy("country"));
API con espacio de nombres web
citiesRef.where("population", ">", 100000).orderBy("country");
Swift
Nota: Este producto no se encuentra disponible en los destinos de watchOS ni de App Clips.citiesRef .whereField("population", isGreaterThan: 100000) .order(by: "country")
Objective‑C
Nota: Este producto no se encuentra disponible en los destinos de watchOS ni de App Clips.[[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
Go
PHP
PHP
Para obtener más información sobre la instalación y creación de un cliente de Cloud Firestore, consulta las bibliotecas cliente de Cloud Firestore.
Unity
Query query = citiesRef .WhereGreaterThan("Population", 2500000) .OrderBy("Country");
C#
Ruby
orderBy
y existencia
Cuando ordenas una consulta por un campo determinado, esta puede mostrar solo los documentos en los que existe el campo order-by.
Por ejemplo, la siguiente consulta no mostraría ningún documento en el que el campo
population
no esté configurado, incluso si, de lo contrario, cumple con los filtros de consulta.
Java
db.collection("cities").whereEqualTo("country", “USA”).orderBy(“population”);
Un efecto relacionado se aplica a las desigualdades. Una consulta con un filtro de desigualdad
en un campo también implica ordenar en ese campo. La siguiente
consulta no muestra documentos sin un campo population
, incluso
si country = USA
aparece en ese documento. Como solución alternativa, puedes ejecutar
consultas separadas para cada orden o asignar un valor a todos los campos
en los aplicas un orden.
Java
db.collection(“cities”).where(or(“country”, USA”), greaterThan(“population”, 250000));
La consulta anterior incluye un order-by implícito sobre la desigualdad y es equivalente a lo siguiente:
Java
db.collection(“cities”).where(or(“country”, USA”), greaterThan(“population”, 250000)).orderBy(“population”);