يوفّر 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);
جافا
Python
Python
C++
cities_ref.OrderBy("name").Limit(3);
Node.js
انتقال
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);
جافا
Python
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);
#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);
جافا
Python
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");
#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);
جافا
Python
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);
#C
لغة 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));
يتضمّن الطلب أعلاه ترتيبًا ضمنيًا حسب عدم المساواة وهو مكافئ لما يلي:
جافا
db.collection(“cities”).where(or(“country”, USA”), greaterThan(“population”, 250000)).orderBy(“population”);