Ordenar y limitar datos
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 Obtén datos.
Ordena y limita los datos
Según la configuración predeterminada, una consulta recupera todos los documentos que satisfacen la consulta en orden ascendente por ID de documento. Puedes especificar el orden de los datos con orderBy()
y limitar la cantidad de documentos recuperados mediante limit()
.
Por ejemplo, puedes realizar una consulta que te muestre las primeras 3 ciudades en orden alfabético con:
Web versión 9
import { query, orderBy, limit } from "firebase/firestore"; const q = query(citiesRef, orderBy("name"), limit(3));
Web versión 8
citiesRef.orderBy("name").limit(3);
Swift
citiesRef.order(by: "name").limit(to: 3)
Objective‑C
[[citiesRef queryOrderedByField:@"name"] queryLimitedTo:3];
Java
Android
citiesRef.orderBy("name").limit(3);
Kotlin+KTX
Android
citiesRef.orderBy("name").limit(3)
Java
Python
Python
(Async)
C++
cities_ref.OrderBy("name").Limit(3);
Node.js
Go
PHP
$query = $citiesRef->orderBy('name')->limit(3);
Unity
Query query = citiesRef.OrderBy("Name").Limit(3);
C#
Query query = citiesRef.OrderBy("Name").Limit(3);
Ruby
También puedes ordenar de forma descendente para ver las últimas 3 ciudades:
Web versión 9
import { query, orderBy, limit } from "firebase/firestore"; const q = query(citiesRef, orderBy("name", "desc"), limit(3));
Web versión 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];
Java
Android
citiesRef.orderBy("name", Direction.DESCENDING).limit(3);
Kotlin+KTX
Android
citiesRef.orderBy("name", Query.Direction.DESCENDING).limit(3)
Java
Python
Python
(Async)
C++
cities_ref.OrderBy("name", Query::Direction::kDescending).Limit(3);
Node.js
Go
PHP
$query = $citiesRef->orderBy('name', 'DESC')->limit(3);
Unity
Query query = citiesRef.OrderByDescending("Name").Limit(3);
C#
Query query = citiesRef.OrderByDescending("Name").Limit(3);
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:
Web versión 9
import { query, orderBy } from "firebase/firestore"; const q = query(citiesRef, orderBy("state"), orderBy("population", "desc"));
Web versión 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];
Java
Android
citiesRef.orderBy("state").orderBy("population", Direction.DESCENDING);
Kotlin+KTX
Android
citiesRef.orderBy("state").orderBy("population", Query.Direction.DESCENDING)
Java
Python
Python
(Async)
C++
cities_ref.OrderBy("state").OrderBy("name", Query::Direction::kDescending);
Node.js
Go
PHP
$query = $citiesRef->orderBy('state')->orderBy('population', 'DESC');
Unity
Query query = citiesRef.OrderBy("State").OrderByDescending("Population");
C#
Query query = citiesRef.OrderBy("State").OrderByDescending("Population");
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:
Web versión 9
import { query, where, orderBy, limit } from "firebase/firestore"; const q = query(citiesRef, where("population", ">", 100000), orderBy("population"), limit(2));
Web versión 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];
Java
Android
citiesRef.whereGreaterThan("population", 100000).orderBy("population").limit(2);
Kotlin+KTX
Android
citiesRef.whereGreaterThan("population", 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
$query = $citiesRef ->where('population', '>', 2500000) ->orderBy('population') ->limit(2);
Unity
Query query = citiesRef .WhereGreaterThan("Population", 2500000) .OrderBy("Population") .Limit(2);
C#
Query query = citiesRef .WhereGreaterThan("Population", 2500000) .OrderBy("Population") .Limit(2);
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 campoWeb versión 9
import { query, where, orderBy } from "firebase/firestore"; const q = query(citiesRef, where("population", ">", 100000), orderBy("population"));
Web versión 8
citiesRef.where("population", ">", 100000).orderBy("population");
Swift
Nota: Este producto no se encuentra disponible en los destinos de watchOS ni de App Clip.citiesRef .whereField("population", isGreaterThan: 100000) .order(by: "population")
Objective‑C
Nota: Este producto no está disponible en los destinos de watchOS ni de App Clip.[[citiesRef queryWhereField:@"population" isGreaterThan:@100000] queryOrderedByField:@"population"];
Java
AndroidcitiesRef.whereGreaterThan("population", 100000).orderBy("population");
Kotlin+KTX
AndroidcitiesRef.whereGreaterThan("population", 100000).orderBy("population")
Java
Query query = cities.whereGreaterThan("population", 2500000L).orderBy("population");
Python
Python
(Async)Node.js
Go
PHP
$query = $citiesRef ->where('population', '>', 2500000) ->orderBy('population');
Unity
Query query = citiesRef .WhereGreaterThan("Population", 2500000) .OrderBy("Population");
C#
Query query = citiesRef .WhereGreaterThan("Population", 2500000) .OrderBy("Population");
Ruby
No válido: Filtro de rango y primer
orderBy
en campos distintosWeb versión 9
import { query, where, orderBy } from "firebase/firestore"; const q = query(citiesRef, where("population", ">", 100000), orderBy("country"));
Web versión 8
citiesRef.where("population", ">", 100000).orderBy("country");
Swift
Nota: Este producto no se encuentra disponible en los destinos de watchOS ni de App Clip.citiesRef .whereField("population", isGreaterThan: 100000) .order(by: "country")
Objective‑C
Nota: Este producto no está disponible en los destinos de watchOS ni de App Clip.[[citiesRef queryWhereField:@"population" isGreaterThan:@100000] queryOrderedByField:@"country"];
Java
AndroidcitiesRef.whereGreaterThan("population", 100000).orderBy("country");
Kotlin+KTX
AndroidcitiesRef.whereGreaterThan("population", 100000).orderBy("country")
Java
Python
Python
(Async)C++
// BAD EXAMPLE -- will crash the program: cities_ref.WhereGreaterThan("population", FieldValue::Integer(100000)) .OrderBy("country");
Node.js
Go
PHP
$invalidRangeQuery = $citiesRef ->where('population', '>', 2500000) ->orderBy('country');
Unity
Query query = citiesRef .WhereGreaterThan("Population", 2500000) .OrderBy("Country");
C#
Query query = citiesRef .WhereGreaterThan("Population", 2500000) .OrderBy("Country");
Ruby
- No puedes ordenar la consulta según ningún campo incluido en una cláusula de igualdad (
=
) oin
.