Mengurutkan dan membatasi data dengan Cloud Firestore

Cloud 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, suatu kueri akan mengambil semua dokumen yang memenuhi kueri tersebut dalam urutan menaik menurut 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

import { query, orderBy, limit } from "firebase/firestore";  

const q = query(citiesRef, orderBy("name"), limit(3));

Web

citiesRef.orderBy("name").limit(3);
Swift
Catatan: Produk ini tidak tersedia di target watchOS dan App Clip.
citiesRef.order(by: "name").limit(to: 3)
Objective-C
Catatan: Produk ini tidak tersedia di target watchOS dan App Clip.
[[citiesRef queryOrderedByField:@"name"] queryLimitedTo:3];

Kotlin+KTX

citiesRef.orderBy("name").limit(3)

Java

citiesRef.orderBy("name").limit(3);

Dart

final citiesRef = db.collection("cities");
citiesRef.orderBy("name").limit(3);
Java
Query query = cities.orderBy("name").limit(3);
Query query = cities.orderBy("name").limitToLast(3);
Python
cities_ref = db.collection("cities")
query = cities_ref.order_by("name").limit_to_last(2)
results = query.get()

Python

cities_ref = db.collection("cities")
query = cities_ref.order_by("name").limit_to_last(2)
results = await query.get()
C++
cities_ref.OrderBy("name").Limit(3);
Node.js
const firstThreeRes = await citiesRef.orderBy('name').limit(3).get();
Go
query := cities.OrderBy("name", firestore.Asc).Limit(3)
query := cities.OrderBy("name", firestore.Asc).LimitToLast(3)
PHP

PHP

Untuk mengetahui informasi lebih lanjut tentang cara menginstal dan membuat klien Cloud Firestore, lihat Library Klien Cloud Firestore.

$query = $citiesRef->orderBy('name')->limit(3);
Unity
Query query = citiesRef.OrderBy("Name").Limit(3);
C#
Query query = citiesRef.OrderBy("Name").Limit(3);
Ruby
query = cities_ref.order("name").limit(3)

Anda juga dapat mengurutkan secara menurun untuk mendapatkan 3 kota terakhir:

Web

import { query, orderBy, limit } from "firebase/firestore";  

const q = query(citiesRef, orderBy("name", "desc"), limit(3));

Web

citiesRef.orderBy("name", "desc").limit(3);
Swift
Catatan: Produk ini tidak tersedia di target watchOS dan App Clip.
citiesRef.order(by: "name", descending: true).limit(to: 3)
Objective-C
Catatan: Produk ini tidak tersedia di target watchOS dan App Clip.
[[citiesRef queryOrderedByField:@"name" descending:YES] queryLimitedTo:3];

Kotlin+KTX

citiesRef.orderBy("name", Query.Direction.DESCENDING).limit(3)

Java

citiesRef.orderBy("name", Direction.DESCENDING).limit(3);

Dart

final citiesRef = db.collection("cities");
citiesRef.orderBy("name", descending: true).limit(3);
Java
Query query = cities.orderBy("name", Direction.DESCENDING).limit(3);
Python
cities_ref = db.collection("cities")
query = cities_ref.order_by("name", direction=firestore.Query.DESCENDING).limit(3)
results = query.stream()

Python

cities_ref = db.collection("cities")
query = cities_ref.order_by("name", direction=firestore.Query.DESCENDING).limit(3)
results = query.stream()
C++
cities_ref.OrderBy("name", Query::Direction::kDescending).Limit(3);
Node.js
const lastThreeRes = await citiesRef.orderBy('name', 'desc').limit(3).get();
Go
query := cities.OrderBy("name", firestore.Desc).Limit(3)
PHP

PHP

Untuk mengetahui informasi lebih lanjut tentang cara menginstal dan membuat klien Cloud Firestore, lihat Library Klien Cloud Firestore.

$query = $citiesRef->orderBy('name', 'DESC')->limit(3);
Unity
Query query = citiesRef.OrderByDescending("Name").Limit(3);
C#
Query query = citiesRef.OrderByDescending("Name").Limit(3);
Ruby
query = cities_ref.order("name", "desc").limit(3)

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

import { query, orderBy } from "firebase/firestore";  

const q = query(citiesRef, orderBy("state"), orderBy("population", "desc"));

Web

citiesRef.orderBy("state").orderBy("population", "desc");
Swift
Catatan: Produk ini tidak tersedia di target watchOS dan App Clip.
citiesRef
  .order(by: "state")
  .order(by: "population", descending: true)
Objective-C
Catatan: Produk ini tidak tersedia di target watchOS dan App Clip.
[[citiesRef queryOrderedByField:@"state"] queryOrderedByField:@"population" descending:YES];

Kotlin+KTX

citiesRef.orderBy("state").orderBy("population", Query.Direction.DESCENDING)

Java

citiesRef.orderBy("state").orderBy("population", Direction.DESCENDING);

Dart

final citiesRef = db.collection("cities");
citiesRef.orderBy("state").orderBy("population", descending: true);
Java
Query query = cities.orderBy("state").orderBy("population", Direction.DESCENDING);
Python
cities_ref = db.collection("cities")
ordered_city_ref = cities_ref.order_by("state").order_by(
    "population", direction=firestore.Query.DESCENDING
)

Python

cities_ref = db.collection("cities")
cities_ref.order_by("state").order_by(
    "population", direction=firestore.Query.DESCENDING
)
C++
cities_ref.OrderBy("state").OrderBy("name", Query::Direction::kDescending);
Node.js
const byStateByPopRes = await citiesRef.orderBy('state').orderBy('population', 'desc').get();
Go
query := client.Collection("cities").OrderBy("state", firestore.Asc).OrderBy("population", firestore.Desc)
PHP

PHP

Untuk mengetahui informasi lebih lanjut tentang cara menginstal dan membuat klien Cloud Firestore, lihat Library Klien Cloud Firestore.

$query = $citiesRef->orderBy('state')->orderBy('population', 'DESC');
Unity
Query query = citiesRef.OrderBy("State").OrderByDescending("Population");
C#
Query query = citiesRef.OrderBy("State").OrderByDescending("Population");
Ruby
query = cities_ref.order("state").order("population", "desc")

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

import { query, where, orderBy, limit } from "firebase/firestore";  

const q = query(citiesRef, where("population", ">", 100000), orderBy("population"), limit(2));

Web

citiesRef.where("population", ">", 100000).orderBy("population").limit(2);
Swift
Catatan: Produk ini tidak tersedia di target watchOS dan App Clip.
citiesRef
  .whereField("population", isGreaterThan: 100000)
  .order(by: "population")
  .limit(to: 2)
Objective-C
Catatan: Produk ini tidak tersedia di target watchOS dan App Clip.
[[[citiesRef queryWhereField:@"population" isGreaterThan:@100000]
    queryOrderedByField:@"population"]
    queryLimitedTo:2];

Kotlin+KTX

citiesRef.whereGreaterThan("population", 100000).orderBy("population").limit(2)

Java

citiesRef.whereGreaterThan("population", 100000).orderBy("population").limit(2);

Dart

final citiesRef = db.collection("cities");
citiesRef
    .where("population", isGreaterThan: 100000)
    .orderBy("population")
    .limit(2);
Java
Query query = cities.whereGreaterThan("population", 2500000L).orderBy("population").limit(2);
Python
cities_ref = db.collection("cities")
query = (
    cities_ref.where(filter=FieldFilter("population", ">", 2500000))
    .order_by("population")
    .limit(2)
)
results = query.stream()

Python

cities_ref = db.collection("cities")
query = (
    cities_ref.where(filter=FieldFilter("population", ">", 2500000))
    .order_by("population")
    .limit(2)
)
results = query.stream()
C++
cities_ref.WhereGreaterThan("population", FieldValue::Integer(100000))
    .OrderBy("population")
    .Limit(2);
Node.js
const biggestRes = await citiesRef.where('population', '>', 2500000)
  .orderBy('population').limit(2).get();
Go
query := cities.Where("population", ">", 2500000).OrderBy("population", firestore.Desc).Limit(2)
PHP

PHP

Untuk mengetahui informasi lebih lanjut tentang cara menginstal dan membuat klien Cloud Firestore, lihat Library Klien Cloud Firestore.

$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
query = cities_ref.where("population", ">", 2_500_000).order("population").limit(2)

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():

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