הזמנה והגבלה של נתונים
Firestore מספק פונקציונליות עוצמתית של שאילתות, שמאפשרת לציין אילו מסמכים רוצים לאחזר מאוסף. אפשר להשתמש בשאילתות האלה גם עם get() או עם addSnapshotListener(), כמו שמתואר במאמר קבלת נתונים.
הזמנה והגבלה של נתונים
כברירת מחדל, שאילתה מאחזרת את כל המסמכים שתואמים לשאילתה בסדר עולה לפי מזהה המסמך. אפשר לציין את סדר המיון של הנתונים באמצעות orderBy(), ולהגביל את מספר המסמכים שאוחזרו באמצעות limit(). אם מציינים limit(), הערך חייב להיות גדול מאפס או שווה לו.
לדוגמה, אפשר לשאול מהן 3 הערים הראשונות לפי סדר אלפביתי:
גרסה 9 לאינטרנט
import { query, orderBy, limit } from "firebase/firestore"; const q = query(citiesRef, orderBy("name"), limit(3));
גרסה 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
המשך
PHP
PHP
כדי לבצע אימות ב-Firestore, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לסביבת פיתוח מקומית.
Unity
Query query = citiesRef.OrderBy("Name").Limit(3);
C#
Ruby
אפשר גם למיין בסדר יורד כדי לקבל את שלוש הערים האחרונות:
גרסה 9 לאינטרנט
import { query, orderBy, limit } from "firebase/firestore"; const q = query(citiesRef, orderBy("name", "desc"), limit(3));
גרסה 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
המשך
PHP
PHP
כדי לבצע אימות ב-Firestore, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לסביבת פיתוח מקומית.
Unity
Query query = citiesRef.OrderByDescending("Name").Limit(3);
C#
Ruby
אפשר גם להזמין לפי כמה שדות. לדוגמה, אם רוצים למיין לפי מדינה, ובכל מדינה למיין לפי אוכלוסייה בסדר יורד:
גרסה 9 לאינטרנט
import { query, orderBy } from "firebase/firestore"; const q = query(citiesRef, orderBy("state"), orderBy("population", "desc"));
גרסה 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
המשך
PHP
PHP
כדי לבצע אימות ב-Firestore, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לסביבת פיתוח מקומית.
Unity
Query query = citiesRef.OrderBy("State").OrderByDescending("Population");
C#
Ruby
אפשר לשלב מסנני where() עם orderBy() ועם limit(). בדוגמה הבאה, השאילתות מגדירות סף אוכלוסייה, ממיינות לפי אוכלוסייה בסדר עולה ומחזירות רק את התוצאות הראשונות שעולות על הסף:
גרסה 9 לאינטרנט
import { query, where, orderBy, limit } from "firebase/firestore"; const q = query(citiesRef, where("population", ">", 100000), orderBy("population"), limit(2));
גרסה 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
המשך
PHP
PHP
כדי לבצע אימות ב-Firestore, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לסביבת פיתוח מקומית.
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 במסמך הזה . כפתרון עקיף, אפשר להריץ שאילתות נפרדות לכל מיון, או להקצות ערך לכל השדות שממיינים לפיהם.
Java
db.collection(“cities”).where(or(“country”, USA”), greaterThan(“population”, 250000));
השאילתה שלמעלה כוללת סדר מרומז לפי אי-השוויון, והיא שוות ערך לשאילתה הבאה:
Java
db.collection(“cities”).where(or(“country”, USA”), greaterThan(“population”, 250000)).orderBy(“population”);