Cloud Firestore cung cấp chức năng truy vấn mạnh mẽ để chỉ định những tài liệu bạn muốn truy xuất từ một bộ sưu tập. Bạn cũng có thể sử dụng các truy vấn này với get()
hoặc addSnapshotListener()
, như mô tả trong phần Nhận dữ liệu.
Sắp xếp thứ tự và giới hạn dữ liệu
Theo mặc định, một truy vấn sẽ truy xuất tất cả tài liệu đáp ứng truy vấn theo thứ tự tăng dần theo mã tài liệu. Bạn có thể chỉ định thứ tự sắp xếp cho dữ liệu bằng orderBy()
và giới hạn số lượng tài liệu được truy xuất bằng limit()
. Nếu bạn chỉ định limit()
, thì giá trị phải lớn hơn hoặc bằng 0.
Ví dụ: bạn có thể truy vấn 3 thành phố đầu tiên theo thứ tự bảng chữ cái với:
Web
import { query, orderBy, limit } from "firebase/firestore"; const q = query(citiesRef, orderBy("name"), limit(3));
Web
citiesRef.orderBy("name").limit(3);
Swift
citiesRef.order(by: "name").limit(to: 3)
Objective-C
[[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
Python
Python
C++
cities_ref.OrderBy("name").Limit(3);
Node.js
Tiến hành
PHP
PHP
Để biết thêm thông tin về cách cài đặt và tạo ứng dụng Cloud Firestore, hãy tham khảo bài viết Thư viện ứng dụng Cloud Firestore.
Unity
Query query = citiesRef.OrderBy("Name").Limit(3);
C#
Ruby
Bạn cũng có thể sắp xếp theo thứ tự giảm dần để chọn 3 thành phố gần đây nhất:
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
citiesRef.order(by: "name", descending: true).limit(to: 3)
Objective-C
[[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
Python
Python
C++
cities_ref.OrderBy("name", Query::Direction::kDescending).Limit(3);
Node.js
Tiến hành
PHP
PHP
Để biết thêm thông tin về cách cài đặt và tạo ứng dụng Cloud Firestore, hãy tham khảo bài viết Thư viện ứng dụng Cloud Firestore.
Unity
Query query = citiesRef.OrderByDescending("Name").Limit(3);
C#
Ruby
Bạn cũng có thể sắp xếp theo nhiều trường. Ví dụ: nếu bạn muốn sắp xếp theo tiểu bang và trong mỗi trạng thái theo thứ tự theo tập hợp theo thứ tự giảm dần:
Web
import { query, orderBy } from "firebase/firestore"; const q = query(citiesRef, orderBy("state"), orderBy("population", "desc"));
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];
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
Python
Python
C++
cities_ref.OrderBy("state").OrderBy("name", Query::Direction::kDescending);
Node.js
Tiến hành
PHP
PHP
Để biết thêm thông tin về cách cài đặt và tạo ứng dụng Cloud Firestore, hãy tham khảo bài viết Thư viện ứng dụng Cloud Firestore.
Unity
Query query = citiesRef.OrderBy("State").OrderByDescending("Population");
C#
Ruby
Bạn có thể kết hợp bộ lọc where()
với orderBy()
và limit()
. Trong ví dụ sau, các truy vấn xác định ngưỡng tập hợp, sắp xếp theo số lượng dữ liệu theo thứ tự tăng dần và chỉ trả về một vài kết quả đầu tiên vượt quá ngưỡng:
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
citiesRef .whereField("population", isGreaterThan: 100000) .order(by: "population") .limit(to: 2)
Objective-C
[[[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
Python
Python
C++
cities_ref.WhereGreaterThan("population", FieldValue::Integer(100000)) .OrderBy("population") .Limit(2);
Node.js
Tiến hành
PHP
PHP
Để biết thêm thông tin về cách cài đặt và tạo ứng dụng Cloud Firestore, hãy tham khảo bài viết Thư viện ứng dụng Cloud Firestore.
Unity
Query query = citiesRef .WhereGreaterThan("Population", 2500000) .OrderBy("Population") .Limit(2);
C#
Ruby
Tuy nhiên, nếu bạn có một bộ lọc có dữ liệu so sánh phạm vi (<
, <=
, >
, >=
), thứ tự đầu tiên của bạn phải ở trên cùng một trường, hãy xem danh sách giới hạn orderBy()
bên dưới.
Hạn chế
Xin lưu ý quy định hạn chế sau đây đối với mệnh đề orderBy()
:
- Mệnh đề
orderBy()
cũng lọc sự tồn tại của các trường đã cho. Tập hợp kết quả sẽ không bao gồm các tài liệu không chứa các trường đã cho.
orderBy
và trạng thái tồn tại
Khi bạn sắp xếp truy vấn theo một trường nhất định, truy vấn đó chỉ có thể trả về các tài liệu có trường theo thứ tự tồn tại.
Ví dụ: truy vấn sau đây sẽ không trả về bất kỳ tài liệu nào khi trường population
chưa được đặt, ngay cả khi các tài liệu đó đáp ứng bộ lọc truy vấn.
Java
db.collection("cities").whereEqualTo("country", “USA”).orderBy(“population”);
Hiệu ứng có liên quan áp dụng cho bất đẳng thức. Truy vấn có bộ lọc bất đẳng thức trên một trường cũng ngụ ý việc sắp xếp theo trường đó. Truy vấn sau đây không trả về các tài liệu không có trường population
ngay cả khi country = USA
trong tài liệu đó . Để khắc phục, bạn có thể thực thi các truy vấn riêng biệt cho mỗi thứ tự hoặc có thể chỉ định giá trị cho tất cả các trường mà bạn đặt hàng.
Java
db.collection(“cities”).where(or(“country”, USA”), greaterThan(“population”, 250000));
Truy vấn ở trên bao gồm thứ tự ngụ ý của bất đẳng thức và tương đương với truy vấn sau:
Java
db.collection(“cities”).where(or(“country”, USA”), greaterThan(“population”, 250000)).orderBy(“population”);