Ordene e limite os dados
O Firestore oferece uma funcionalidade de consulta avançada para especificar os documentos que quer obter de uma coleção. Estas consultas também podem ser usadas com get()
ou addSnapshotListener()
, conforme descrito em Obter
dados.
Ordene e limite os dados
Por predefinição, uma consulta obtém todos os documentos que satisfazem a consulta por ordem ascendente do ID do documento. Pode especificar a ordem de ordenação dos seus dados através de
orderBy()
e pode limitar o número de documentos obtidos através de
limit()
. Se especificar um limit()
, o valor tem de ser igual ou superior a zero.
Por exemplo, pode consultar as 3 primeiras cidades por ordem alfabética com:
Versão Web 9
import { query, orderBy, limit } from "firebase/firestore"; const q = query(citiesRef, orderBy("name"), limit(3));
Versão 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
(assíncrono)
C++
cities_ref.OrderBy("name").Limit(3);
Node.js
Go
PHP
PHP
Para se autenticar no Firestore, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para um ambiente de desenvolvimento local.
Unity
Query query = citiesRef.OrderBy("Name").Limit(3);
C#
Ruby
Também pode ordenar por ordem descendente para ver as 3 cidades mais recentes:
Versão Web 9
import { query, orderBy, limit } from "firebase/firestore"; const q = query(citiesRef, orderBy("name", "desc"), limit(3));
Versão 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
(assíncrono)
C++
cities_ref.OrderBy("name", Query::Direction::kDescending).Limit(3);
Node.js
Go
PHP
PHP
Para se autenticar no Firestore, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para um ambiente de desenvolvimento local.
Unity
Query query = citiesRef.OrderByDescending("Name").Limit(3);
C#
Ruby
Também pode ordenar por vários campos. Por exemplo, se quiser ordenar por estado e, em cada estado, ordenar por população por ordem descendente:
Versão Web 9
import { query, orderBy } from "firebase/firestore"; const q = query(citiesRef, orderBy("state"), orderBy("population", "desc"));
Versão 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
(assíncrono)
C++
cities_ref.OrderBy("state").OrderBy("name", Query::Direction::kDescending);
Node.js
Go
PHP
PHP
Para se autenticar no Firestore, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para um ambiente de desenvolvimento local.
Unity
Query query = citiesRef.OrderBy("State").OrderByDescending("Population");
C#
Ruby
Pode combinar filtros where()
com orderBy()
e limit()
. No exemplo seguinte, as consultas definem um limite da população, ordenam por população por ordem ascendente e devolvem apenas os primeiros resultados que excedem o limite:
Versão Web 9
import { query, where, orderBy, limit } from "firebase/firestore"; const q = query(citiesRef, where("population", ">", 100000), orderBy("population"), limit(2));
Versão 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
(assíncrono)
C++
cities_ref.WhereGreaterThan("population", FieldValue::Integer(100000)) .OrderBy("population") .Limit(2);
Node.js
Go
PHP
PHP
Para se autenticar no Firestore, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure 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 tiver um filtro com uma comparação de intervalo (<
, <=
, >
, >=
),
a primeira ordenação tem de ser no mesmo campo. Consulte a lista de orderBy()
limitações abaixo.
Limitações
Tenha em atenção a seguinte restrição para as cláusulas orderBy()
:
- Uma cláusula
orderBy()
também filtra a existência dos campos indicados. O conjunto de resultados não inclui documentos que não contenham os campos indicados.
orderBy
e existência
Quando ordena uma consulta por um determinado campo, a consulta só pode devolver os documentos onde o campo de ordenação existe.
Por exemplo, a seguinte consulta não devolve documentos em que o campo population
não está definido, mesmo que cumpram os filtros da consulta.
Java
db.collection("cities").whereEqualTo("country", “USA”).orderBy(“population”);
Um efeito relacionado aplica-se a desigualdades. Uma consulta com um filtro de desigualdade num campo também implica a ordenação por esse campo. A seguinte consulta não devolve documentos sem um campo population
, mesmo que country = USA
nesse documento . Como solução alternativa, pode executar consultas separadas para cada ordenação ou pode atribuir um valor a todos os campos pelos quais ordena.
Java
db.collection(“cities”).where(or(“country”, USA”), greaterThan(“population”, 250000));
A consulta acima inclui uma ordenação implícita na desigualdade e é equivalente ao seguinte:
Java
db.collection(“cities”).where(or(“country”, USA”), greaterThan(“population”, 250000)).orderBy(“population”);