Cloud Firestore מספק פונקציונליות חזקה של שאילתות כדי לציין את המסמכים שרוצים לאחזר מאוסף. אפשר להשתמש בשאילתות האלה גם עם get()
או addSnapshotListener()
, כפי שמתואר בקטע קבלת נתונים.
סדרת נתונים והגבלת נתונים
כברירת מחדל, שאילתה מאחזרת את כל המסמכים שמתאימים לשאילתה בסדר עולה לפי מזהה המסמך. אפשר לציין את סדר המיון של הנתונים באמצעות orderBy()
, ולהגביל את מספר המסמכים שאוחזרים באמצעות limit()
. אם מציינים ערך של limit()
, הערך חייב להיות גדול מאפס או שווה לו.
לדוגמה, אפשר לשלוח שאילתה ל-3 הערים הראשונות בסדר אלפביתי עם:
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
Go
PHP
PHP
מידע נוסף על התקנה ויצירה של לקוח Cloud Firestore זמין במאמר ספריות הלקוח של Cloud Firestore.
Unity
Query query = citiesRef.OrderBy("Name").Limit(3);
C#
Ruby
אפשר גם למיין בסדר יורד כדי לקבל את 3 הערים האחרונות:
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
Go
PHP
PHP
מידע נוסף על התקנה ויצירה של לקוח Cloud Firestore זמין במאמר ספריות לקוח של Cloud Firestore.
Unity
Query query = citiesRef.OrderByDescending("Name").Limit(3);
C#
Ruby
אפשר גם למיין לפי כמה שדות. לדוגמה, אם רוצים למיין לפי מדינה, ובכל מדינה לפי אוכלוסייה בסדר יורד:
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
Go
PHP
PHP
מידע נוסף על התקנה ויצירה של לקוח Cloud Firestore זמין במאמר ספריות הלקוח של Cloud Firestore.
Unity
Query query = citiesRef.OrderBy("State").OrderByDescending("Population");
C#
Ruby
אפשר לשלב מסנני where()
עם orderBy()
ועם limit()
. בדוגמה הבאה, השאילתות מגדירות ערך סף של אוכלוסייה, ממיינות לפי אוכלוסייה בסדר עולה ומחזירות רק את התוצאות הראשונות שעומדות בערך הסף:
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
Go
PHP
PHP
מידע נוסף על התקנה ויצירה של לקוח Cloud Firestore זמין במאמר ספריות הלקוח של Cloud Firestore.
Unity
Query query = citiesRef .WhereGreaterThan("Population", 2500000) .OrderBy("Population") .Limit(2);
C#
Ruby
אבל אם יש מסנן עם השוואת טווח (<
, <=
, >
, >=
), הסדר הראשון צריך להיות באותו השדה. כדאי לעיין ברשימת המגבלות של orderBy()
בהמשך.
מגבלות
חשוב לשים לב להגבלה הבאה לגבי orderBy()
סעיפים:
- תנאי
orderBy()
גם מסנן את קיומם של השדות הנתונים. קבוצת התוצאות לא תכלול מסמכים שלא מכילים את השדות הנתונים.
orderBy
וקיומ
כשמגדירים שאילתות לפי שדה נתון, השאילתה יכולה להחזיר רק את המסמכים שבהם השדה לפיו מגדירים את הסדר קיים.
לדוגמה, השאילתה הבאה לא תחזיר מסמכים שבהם השדה population
לא מוגדר, גם אם הם עומדים בכל שאר מסנני השאילתה.
Java
db.collection("cities").whereEqualTo("country", “USA”).orderBy(“population”);
השפעה קשורה חלה על אי-שוויון. שאילתה עם מסנן אי-שוויון בשדה מסוים כוללת גם סדר לפי השדה הזה. השאילתה הבאה לא מחזירה מסמכים ללא השדה population
, גם אם הערך של country = USA
במסמך הזה הוא null. כפתרון עקיף, אפשר להריץ שאילתות נפרדות לכל סדר או להקצות ערך לכל השדות לפי הסדר.
Java
db.collection(“cities”).where(or(“country”, USA”), greaterThan(“population”, 250000));
השאילתה שלמעלה כוללת order-by משתמע על אי-השוויון, והיא שווה לשאילתה הבאה:
Java
db.collection(“cities”).where(or(“country”, USA”), greaterThan(“population”, 250000)).orderBy(“population”);