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”);