Buka konsol

Mengurutkan dan Membatasi Data dengan Cloud Firestore

Cloud Firestore menyediakan fungsionalitas kueri andal untuk menentukan dokumen mana yang ingin Anda ambil dari koleksi. Kueri ini juga dapat digunakan dengan get() atau addSnapshotListener(), seperti yang dijelaskan di bagian Mendapatkan Data.

Mengurutkan dan membatasi data

Cloud Firestore juga dapat digunakan untuk menentukan urutan untuk data Anda dan batas untuk jumlah dokumen yang ingin Anda ambil menggunakan orderBy() dan limit(). Misalnya, Anda dapat mengajukan kueri untuk 3 kota pertama menurut abjad dengan:

Web
citiesRef.orderBy("name").limit(3)
Swift
citiesRef.order(by: "name").limit(to: 3)
Objective-C
[[citiesRef queryOrderedByField:@"name"] queryLimitedTo:3];
  
Android
citiesRef.orderBy("name").limit(3);
Java
Query query = cities.orderBy("name").limit(3);
Python
db.collection(u'cities').order_by(u'name').limit(3).get()
Node.js
var firstThree = citiesRef.orderBy('name').limit(3);
Go
query := cities.OrderBy("name", firestore.Asc).Limit(3)
PHP
$query = $citiesRef->orderBy('name')->limit(3);

Anda juga dapat mengurutkan dalam urutan menurun untuk mendapatkan 3 kota terakhir:

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];
  
Android
citiesRef.orderBy("name", Direction.DESCENDING).limit(3);
Java
Query query = cities.orderBy("name", Direction.DESCENDING).limit(3);
Python
cities_ref = db.collection(u'cities')
query = cities_ref.order_by(
    u'name', direction=firestore.Query.DESCENDING).limit(3)
results = query.get()
Node.js
var lastThree = citiesRef.orderBy('name', 'desc').limit(3);
Go
query := cities.OrderBy("name", firestore.Desc).Limit(3)
PHP
$query = $citiesRef->orderBy('name', 'DESC')->limit(3);

Anda juga dapat mengurutkan berdasarkan beberapa kolom. Misalnya, jika Anda ingin mengurutkan berdasarkan negara, dan dalam setiap negara mengurutkan berdasarkan populasi dalam urutan menurun:

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];
  
Android
citiesRef.orderBy("state").orderBy("population", Direction.DESCENDING);
Java
Query query = cities.orderBy("state").orderBy("population", Direction.DESCENDING);
Python
cities_ref = db.collection(u'cities')
cities_ref.order_by(u'state').order_by(
    u'population', direction=firestore.Query.DESCENDING)
Node.js
var byStateByPop = citiesRef.orderBy('state').orderBy('population', 'desc');
Go
query := client.Collection("cities").OrderBy("state", firestore.Asc).OrderBy("population", firestore.Desc)
PHP
$query = $citiesRef->orderBy('state')->orderBy('population', 'DESC');

Anda dapat menggabungkan filter where() dengan orderBy() dan limit(). Dalam contoh berikut, kueri menentukan ambang populasi, mengurutkan berdasarkan populasi dalam urutan menaik, dan hanya mengembalikan beberapa hasil pertama yang melebihi ambang batas:

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];
  
Android
citiesRef.whereGreaterThan("population", 100000).orderBy("population").limit(2);
Java
Query query = cities.whereGreaterThan("population", 2500000L).orderBy("population").limit(2);
Python
cities_ref = db.collection(u'cities')
query = cities_ref.where(
    u'population', u'>', 2500000).order_by(u'population').limit(2)
results = query.get()
Node.js
var biggest = citiesRef.where('population', '>', 2500000).orderBy('population').limit(2);
Go
query := cities.Where("population", ">", 2500000).OrderBy("population", firestore.Desc).Limit(2)
PHP
$query = $citiesRef
    ->where('population', '>', 2500000)
    ->orderBy('population')
    ->limit(2);

Namun, jika Anda memiliki filter dengan perbandingan rentang (<, <=, >, >=), urutan pertama Anda harus berada pada kolom yang sama:

Valid: Filter rentang dan orderBy berada pada kolom yang sama

Web
citiesRef.where("population", ">", 100000).orderBy("population")
Swift
citiesRef
    .whereField("population", isGreaterThan: 100000)
    .order(by: "population")
Objective-C
[[citiesRef queryWhereField:@"population" isGreaterThan:@100000]
    queryOrderedByField:@"population"];
  
Android
citiesRef.whereGreaterThan("population", 100000).orderBy("population");
Java
Query query = cities.whereGreaterThan("population", 2500000L).orderBy("population");
Python
cities_ref = db.collection(u'cities')
query = cities_ref.where(
    u'population', u'>', 2500000).order_by(u'population')
results = query.get()
Node.js
citiesRef.where('population', '>', 2500000).orderBy('population');
Go
query := cities.Where("population", ">", 2500000).OrderBy("population", firestore.Asc)
PHP
$query = $citiesRef
    ->where('population', '>', 2500000)
    ->orderBy('population');

Tidak valid: Filter rentang dan orderBy pertama berada pada kolom berbeda

Web
citiesRef.where("population", ">", 100000).orderBy("country")
Swift
citiesRef
    .whereField("population", isGreaterThan: 100000)
    .order(by: "country")
Objective-C
[[citiesRef queryWhereField:@"population" isGreaterThan:@100000] queryOrderedByField:@"country"];
  
Android
citiesRef.whereGreaterThan("population", 100000).orderBy("country");
Java
Query query = cities.whereGreaterThan("population", 2500000L).orderBy("country");
Python
cities_ref = db.collection(u'cities')
query = cities_ref.where(u'population', u'>', 2500000).order_by(u'country')
results = query.get()
Node.js
citiesRef.where('population', '>', 2500000).orderBy('country');
Go
// Note: This is an invalid query. It violates the constraint that range
// and order by are required to be on the same field.
query := cities.Where("population", ">", 2500000).OrderBy("country", firestore.Asc)
PHP
$query = $citiesRef
    ->where('population', '>', 2500000)
    ->orderBy('country');