Ordenar e limitar dados
O Firestore oferece uma poderosa funcionalidade de consulta para especificar quais
documentos você quer recuperar em uma coleção. Essas consultas também podem ser usadas com get()
ou addSnapshotListener()
, conforme descrito em Receber dados.
Ordenar e limitar dados
Por padrão, uma consulta recupera todos os documentos que atendem a ela em ordem crescente
por ID. Use orderBy()
para especificar a ordem de classificação dos dados
e limit()
para limitar o número de documentos
recuperados. Se você especificar um limit()
, o valor precisará ser maior ou igual
a zero.
Por exemplo, para consultar as três primeiras cidades em ordem alfabética, use:
Versão 9 para a Web
import { query, orderBy, limit } from "firebase/firestore"; const q = query(citiesRef, orderBy("name"), limit(3));
Versão 8 para a Web
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
(assíncrono)
C++
cities_ref.OrderBy("name").Limit(3);
Node.js
Go
PHP
PHP
Para autenticar no Firestore, configure o Application Default Credentials. Para mais informações, consulte Configurar a autenticação para um ambiente de desenvolvimento local.
Unity
Query query = citiesRef.OrderBy("Name").Limit(3);
C#
Ruby
Para ver as três últimas cidades, classifique em ordem decrescente:
Versão 9 para a Web
import { query, orderBy, limit } from "firebase/firestore"; const q = query(citiesRef, orderBy("name", "desc"), limit(3));
Versão 8 para a 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
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
(assíncrono)
C++
cities_ref.OrderBy("name", Query::Direction::kDescending).Limit(3);
Node.js
Go
PHP
PHP
Para autenticar no Firestore, configure o Application Default Credentials. Para mais informações, consulte Configurar a autenticação para um ambiente de desenvolvimento local.
Unity
Query query = citiesRef.OrderByDescending("Name").Limit(3);
C#
Ruby
Além disso, também é possível ordenar por vários campos. Por exemplo, se você quiser ordenar por estado e, dentro de cada estado ordenar por população em ordem decrescente:
Versão 9 para a Web
import { query, orderBy } from "firebase/firestore"; const q = query(citiesRef, orderBy("state"), orderBy("population", "desc"));
Versão 8 para a 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
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
(assíncrono)
C++
cities_ref.OrderBy("state").OrderBy("name", Query::Direction::kDescending);
Node.js
Go
PHP
PHP
Para autenticar no Firestore, configure o Application Default Credentials. Para mais informações, consulte Configurar a autenticação para um ambiente de desenvolvimento local.
Unity
Query query = citiesRef.OrderBy("State").OrderByDescending("Population");
C#
Ruby
É possível combinar filtros where()
com orderBy()
e limit()
. No
exemplo a seguir, as consultas definem um limite para população, ordenam por esse valor
em ordem crescente e retornam apenas os primeiros resultados que excedem o
limite:
Versão 9 para a Web
import { query, where, orderBy, limit } from "firebase/firestore"; const q = query(citiesRef, where("population", ">", 100000), orderBy("population"), limit(2));
Versão 8 para a 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
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
(assíncrono)
C++
cities_ref.WhereGreaterThan("population", FieldValue::Integer(100000)) .OrderBy("population") .Limit(2);
Node.js
Go
PHP
PHP
Para autenticar no Firestore, configure o Application Default Credentials. Para mais informações, consulte Configurar a autenticação para um ambiente de desenvolvimento local.
Unity
Query query = citiesRef .WhereGreaterThan("Population", 2500000) .OrderBy("Population") .Limit(2);
C#
Ruby
No entanto, se você tiver um filtro com uma comparação de intervalos (<
, <=
, >
, >=
),
sua primeira classificação precisará estar no mesmo campo. Consulte a lista de limitações de orderBy()
abaixo.
Limitações
Observe a seguinte restrição para cláusulas orderBy()
:
- Uma cláusula
orderBy()
também filtra a existência dos campos fornecidos. O conjunto de resultados não incluirá documentos que não contenham os campos fornecidos.
orderBy
e existência
Quando você ordena uma consulta por um determinado campo, ela só pode retornar os documentos em que o campo de ordenação existe.
Por exemplo, a consulta a seguir não retornaria nenhum documento em que o campo
population
não estivesse definido, mesmo que atendesse aos filtros de consulta.
Java
db.collection("cities").whereEqualTo("country", “USA”).orderBy(“population”);
Um efeito relacionado se aplica a desigualdades. Uma consulta com um filtro de desigualdade
em um campo também implica ordenação por esse campo. A consulta
a seguir não retorna documentos sem um campo population
, mesmo que
country = USA
nesse documento. Como solução alternativa, você pode executar
consultas separadas para cada ordem ou atribuir um valor para todos os campos
que ordena.
Java
db.collection(“cities”).where(or(“country”, USA”), greaterThan(“population”, 250000));
A consulta acima inclui uma ordenação implícita sobre a desigualdade e é equivalente ao seguinte:
Java
db.collection(“cities”).where(or(“country”, USA”), greaterThan(“population”, 250000)).orderBy(“population”);