Cloud Firestore قابلیت پرسوجوی قدرتمندی را برای مشخص کردن اسنادی که میخواهید از یک مجموعه بازیابی کنید، فراهم میکند. این پرسوجوها همچنین میتوانند با get() یا addSnapshotListener() استفاده شوند، همانطور که در Get Data توضیح داده شده است.
سفارش و محدود کردن دادهها
به طور پیشفرض، یک پرسوجو تمام اسنادی را که مطابق با پرسوجو هستند، به ترتیب صعودی بر اساس شناسه سند بازیابی میکند. میتوانید ترتیب مرتبسازی دادههای خود را با استفاده از orderBy() مشخص کنید و میتوانید تعداد اسناد بازیابی شده را با استفاده limit() محدود کنید. اگر limit() مشخص کنید، مقدار باید بزرگتر یا مساوی صفر باشد.
برای مثال، میتوانید با استفاده از دستور زیر، سه شهر اول را به ترتیب حروف الفبا جستجو کنید:
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)
هدف-سی
[[citiesRef queryOrderedByField:@"name"] queryLimitedTo:3];
Kotlin
citiesRef.orderBy("name").limit(3)
Java
citiesRef.orderBy("name").limit(3);
Dart
final citiesRef = db.collection("cities"); citiesRef.orderBy("name").limit(3);
جاوا
پایتون
Python
سی++
cities_ref.OrderBy("name").Limit(3);
نود جی اس
برو
پی اچ پی
پی اچ پی
برای اطلاعات بیشتر در مورد نصب و ایجاد یک کلاینت Cloud Firestore ، به کتابخانههای کلاینت Cloud Firestore مراجعه کنید.
وحدت
Query query = citiesRef.OrderBy("Name").Limit(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)
هدف-سی
[[citiesRef queryOrderedByField:@"name" descending:YES] queryLimitedTo:3];
Kotlin
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
سی++
cities_ref.OrderBy("name", Query::Direction::kDescending).Limit(3);
نود جی اس
برو
پی اچ پی
پی اچ پی
برای اطلاعات بیشتر در مورد نصب و ایجاد یک کلاینت 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)
هدف-سی
[[citiesRef queryOrderedByField:@"state"] queryOrderedByField:@"population" descending:YES];
Kotlin
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
سی++
cities_ref.OrderBy("state").OrderBy("name", Query::Direction::kDescending);
نود جی اس
برو
پی اچ پی
پی اچ پی
برای اطلاعات بیشتر در مورد نصب و ایجاد یک کلاینت 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)
هدف-سی
[[[citiesRef queryWhereField:@"population" isGreaterThan:@100000] queryOrderedByField:@"population"] queryLimitedTo:2];
Kotlin
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
سی++
cities_ref.WhereGreaterThan("population", FieldValue::Integer(100000)) .OrderBy("population") .Limit(2);
نود جی اس
برو
پی اچ پی
پی اچ پی
برای اطلاعات بیشتر در مورد نصب و ایجاد یک کلاینت 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”);