Cloud Firestore عملکرد جستجوی قدرتمندی را برای مشخص کردن اینکه کدام اسناد را میخواهید از مجموعه بازیابی کنید ارائه میدهد. این پُرسمانها را میتوان با get() یا addSnapshotListener() نیز استفاده کرد، همانطور که در دریافت داده شرح داده شده است.
دادههای سفارش و محدودیت
بهطور پیشفرض، پُرسمان همه اسنادی را که با پُرسمان مطابقت دارند بهترتیب صعودی براساس شناسه سند بازیابی میکند. میتوانید ترتیب مرتبسازی دادههایتان را بااستفاده از
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);
Swift
citiesRef.order(by: "name").limit(to: 3)
Objective-C
[[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
C++
cities_ref.OrderBy("name").Limit(3);
Node.js
رفتن
PHP
PHP
برای کسب اطلاعات بیشتر درباره نصب و ایجاد کارخواه Cloud Firestore، به کتابخانههای کارخواه Cloud Firestore مراجعه کنید.
Unity
Query query = citiesRef.OrderBy("Name").Limit(3);
سی شارپ
Ruby
همچنین میتوانید بهترتیب نزولی مرتب کنید تا آخرین ۳ شهر را دریافت کنید:
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
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 مراجعه کنید.
Unity
Query query = citiesRef.OrderByDescending("Name").Limit(3);
سی شارپ
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
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 مراجعه کنید.
Unity
Query query = citiesRef.OrderBy("State").OrderByDescending("Population");
سی شارپ
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
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 مراجعه کنید.
Unity
Query query = citiesRef .WhereGreaterThan("Population", 2500000) .OrderBy("Population") .Limit(2);
سی شارپ
Ruby
بااینحال، اگر فیلتری با مقایسه محدوده (<، <=، >، >=) دارید،
اولین ترتیب شما باید در همان فیلد باشد، فهرست 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));
پُرسمان بالا شامل یک order-by ضمنی روی نابرابری است و معادل با موارد زیر است:
جاوا
db.collection(“cities”).where(or(“country”, USA”), greaterThan(“population”, 250000)).orderBy(“population”);