Mengurutkan dan membatasi data
Firestore menyediakan fungsionalitas kueri yang dapat diandalkan untuk menentukan dokumen mana yang ingin Anda ambil dari koleksi. Kueri ini juga dapat digunakan
dengan get() atau addSnapshotListener(), seperti yang dijelaskan dalam artikel Mendapatkan Data.
Mengurutkan dan membatasi data
Secara default, kueri mengambil semua dokumen yang memenuhi kueri dalam urutan naik berdasarkan ID dokumen. Anda dapat menentukan tata urutan data untuk menggunakan
orderBy(), dan membatasi jumlah dokumen yang diambil menggunakan
limit(). Jika Anda menentukan limit(), nilai harus lebih besar dari atau sama dengan nol.
Misalnya, Anda dapat mengajukan kueri untuk 3 kota pertama menurut abjad dengan:
Web versi 9
import { query, orderBy, limit } from "firebase/firestore"; const q = query(citiesRef, orderBy("name"), limit(3));
Web versi 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
(Async)
C++
cities_ref.OrderBy("name").Limit(3);
Node.js
Go
PHP
PHP
Untuk melakukan autentikasi ke Firestore, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, lihat Menyiapkan autentikasi untuk lingkungan pengembangan lokal.
Unity
Query query = citiesRef.OrderBy("Name").Limit(3);
C#
Ruby
Anda juga dapat mengurutkan dalam urutan menurun untuk mendapatkan 3 kota terakhir:
Web versi 9
import { query, orderBy, limit } from "firebase/firestore"; const q = query(citiesRef, orderBy("name", "desc"), limit(3));
Web versi 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
(Async)
C++
cities_ref.OrderBy("name", Query::Direction::kDescending).Limit(3);
Node.js
Go
PHP
PHP
Untuk melakukan autentikasi ke Firestore, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, lihat Menyiapkan autentikasi untuk lingkungan pengembangan lokal.
Unity
Query query = citiesRef.OrderByDescending("Name").Limit(3);
C#
Ruby
Anda juga dapat mengurutkan berdasarkan beberapa kolom. Misalnya, jika Anda ingin mengurutkan berdasarkan negara bagian, dan dalam setiap negara bagian mengurutkan berdasarkan populasi dalam urutan menurun:
Web versi 9
import { query, orderBy } from "firebase/firestore"; const q = query(citiesRef, orderBy("state"), orderBy("population", "desc"));
Web versi 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
(Async)
C++
cities_ref.OrderBy("state").OrderBy("name", Query::Direction::kDescending);
Node.js
Go
PHP
PHP
Untuk melakukan autentikasi ke Firestore, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, lihat Menyiapkan autentikasi untuk lingkungan pengembangan lokal.
Unity
Query query = citiesRef.OrderBy("State").OrderByDescending("Population");
C#
Ruby
Anda dapat menggabungkan filter where() dengan orderBy() dan limit(). Dalam
contoh berikut, kueri menentukan nilai minimum populasi, mengurutkan berdasarkan populasi
secara menaik, dan hanya mengembalikan beberapa hasil pertama yang melampaui
nilai minimum tersebut:
Web versi 9
import { query, where, orderBy, limit } from "firebase/firestore"; const q = query(citiesRef, where("population", ">", 100000), orderBy("population"), limit(2));
Web versi 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
(Async)
C++
cities_ref.WhereGreaterThan("population", FieldValue::Integer(100000)) .OrderBy("population") .Limit(2);
Node.js
Go
PHP
PHP
Untuk melakukan autentikasi ke Firestore, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, lihat Menyiapkan autentikasi untuk lingkungan pengembangan lokal.
Unity
Query query = citiesRef .WhereGreaterThan("Population", 2500000) .OrderBy("Population") .Limit(2);
C#
Ruby
Namun, jika Anda memiliki filter dengan perbandingan rentang (<, <=, >, >=), pengurutan pertama harus berada di kolom yang sama. Lihat daftar batasan orderBy() di bawah ini.
Batasan
Perhatikan batasan berikut untuk klausa orderBy():
- Klausa
orderBy()juga memfilter ada tidaknya kolom yang dimaksud. Kumpulan hasilnya tidak akan menyertakan dokumen yang tidak berisi kolom yang dimaksud.
orderBy dan keberadaannya
Saat Anda mengurutkan kueri berdasarkan kolom tertentu, kueri tersebut hanya dapat menampilkan dokumen yang memiliki urutan berdasarkan kolom.
Misalnya, kueri berikut tidak akan menampilkan dokumen apa pun yang tidak memiliki kolom population, meskipun kolom tersebut memenuhi filter kueri.
Java
db.collection("cities").whereEqualTo("country", “USA”).orderBy(“population”);
Efek terkait berlaku pada ketidaksetaraan. Kueri dengan filter ketidaksetaraan pada satu kolom juga menyiratkan pengurutan berdasarkan kolom tersebut. Kueri berikut tidak menampilkan dokumen tanpa kolom population sekalipun country = USA dalam dokumen tersebut . Sebagai solusinya, Anda dapat menjalankan kueri terpisah untuk setiap pengurutan atau menetapkan nilai untuk semua kolom yang Anda urutkan.
Java
db.collection(“cities”).where(or(“country”, USA”), greaterThan(“population”, 250000));
Kueri di atas mencakup urutan tersirat berdasarkan ketidaksetaraan dan setara dengan hal berikut:
Java
db.collection(“cities”).where(or(“country”, USA”), greaterThan(“population”, 250000)).orderBy(“population”);