Cloud Firestore عملکرد قدرتمند پرس و جو را برای تعیین اسنادی که می خواهید از یک مجموعه بازیابی کنید فراهم می کند. این کوئری ها همچنین می توانند با get()
یا addSnapshotListener()
استفاده شوند، همانطور که در Get Data توضیح داده شده است.
داده ها را سفارش دهید و محدود کنید
به طور پیش فرض، یک پرس و جو تمام اسنادی را که پرس و جو را برآورده می کنند به ترتیب صعودی با شناسه سند بازیابی می کند. می توانید ترتیب مرتب سازی داده های خود را با استفاده از 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);
سویفت
citiesRef.order(by: "name").limit(to: 3)
هدف-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);
جاوا
پایتون
Python
C++
cities_ref.OrderBy("name").Limit(3);
Node.js
برو
PHP
PHP
برای اطلاعات بیشتر در مورد نصب و ایجاد کلاینت Cloud Firestore ، به کتابخانه های سرویس گیرنده Cloud Firestore مراجعه کنید.
وحدت
Query query = citiesRef.OrderBy("Name").Limit(3);
سی شارپ
روبی
همچنین می توانید برای دریافت 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);
سویفت
citiesRef.order(by: "name", descending: true).limit(to: 3)
هدف-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);
جاوا
پایتون
Python
C++
cities_ref.OrderBy("name", Query::Direction::kDescending).Limit(3);
Node.js
برو
PHP
PHP
برای اطلاعات بیشتر در مورد نصب و ایجاد کلاینت Cloud Firestore ، به کتابخانه های سرویس گیرنده Cloud Firestore مراجعه کنید.
وحدت
Query query = citiesRef.OrderByDescending("Name").Limit(3);
سی شارپ
روبی
همچنین می توانید بر اساس چندین فیلد سفارش دهید. به عنوان مثال، اگر میخواهید بر اساس ایالت و در هر ایالت به ترتیب جمعیت به ترتیب نزولی ترتیب دهید:
Web
import { query, orderBy } from "firebase/firestore"; const q = query(citiesRef, orderBy("state"), orderBy("population", "desc"));
Web
citiesRef.orderBy("state").orderBy("population", "desc");
سویفت
citiesRef .order(by: "state") .order(by: "population", descending: true)
هدف-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);
جاوا
پایتون
Python
C++
cities_ref.OrderBy("state").OrderBy("name", Query::Direction::kDescending);
Node.js
برو
PHP
PHP
برای اطلاعات بیشتر در مورد نصب و ایجاد کلاینت Cloud Firestore ، به کتابخانه های سرویس گیرنده Cloud Firestore مراجعه کنید.
وحدت
Query query = citiesRef.OrderBy("State").OrderByDescending("Population");
سی شارپ
روبی
می توانید فیلترهای 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);
سویفت
citiesRef .whereField("population", isGreaterThan: 100000) .order(by: "population") .limit(to: 2)
هدف-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);
جاوا
پایتون
Python
C++
cities_ref.WhereGreaterThan("population", FieldValue::Integer(100000)) .OrderBy("population") .Limit(2);
Node.js
برو
PHP
PHP
برای اطلاعات بیشتر در مورد نصب و ایجاد کلاینت Cloud Firestore ، به کتابخانه های سرویس گیرنده Cloud Firestore مراجعه کنید.
وحدت
Query query = citiesRef .WhereGreaterThan("Population", 2500000) .OrderBy("Population") .Limit(2);
سی شارپ
روبی
با این حال، اگر فیلتری با مقایسه محدوده دارید ( <
، <=
، >
، >=
)، اولین سفارش شما باید در همان فیلد باشد، لیست محدودیت های orderBy()
را در زیر ببینید.
محدودیت ها
برای بندهای orderBy()
به محدودیت زیر توجه کنید:
- یک عبارت
orderBy()
نیز وجود فیلدهای داده شده را فیلتر می کند . مجموعه نتایج شامل اسنادی که فیلدهای داده شده را ندارند، نمی شود.
orderBy
و وجود
هنگامی که یک پرس و جو را بر اساس یک فیلد مشخص سفارش می دهید، پرس و جو فقط می تواند اسنادی را که فیلد ترتیب بر اساس وجود دارد، برگرداند.
برای مثال، جستار زیر هیچ سندی را که فیلد population
تنظیم نشده است، باز نمیگرداند، حتی اگر در غیر این صورت فیلترهای پرس و جو را داشته باشند.
جاوا
db.collection("cities").whereEqualTo("country", “USA”).orderBy(“population”);
یک اثر مرتبط برای نابرابری ها اعمال می شود. یک پرس و جو با فیلتر نابرابری در یک فیلد نیز به ترتیب بر اساس آن فیلد دلالت دارد. پرس و جوی زیر اسناد را بدون فیلد population
باز نمی گرداند، حتی اگر country = USA
در آن سند باشد. بهعنوان راهحل، میتوانید پرسوجوهای جداگانهای را برای هر سفارش اجرا کنید یا میتوانید برای تمام فیلدهایی که بر اساس آنها سفارش میدهید، یک مقدار اختصاص دهید.
جاوا
db.collection(“cities”).where(or(“country”, USA”), greaterThan(“population”, 250000));
پرس و جو فوق شامل یک ترتیب ضمنی در مورد نابرابری است و معادل موارد زیر است:
جاوا
db.collection(“cities”).where(or(“country”, USA”), greaterThan(“population”, 250000)).orderBy(“population”);