يوفّر Cloud Firestore وظيفة استعلام فعّالة لتحديد
المستندات التي تريد استردادها من مجموعة. يمكن أيضًا استخدام طلبات البحث هذه
مع get()
أو addSnapshotListener()
، كما هو موضّح في الحصول على
البيانات.
ترتيب البيانات والحدّ الأقصى لها
يسترجع طلب البحث تلقائيًا جميع المستندات التي تستوفي طلب البحث بترتيب تصاعدي
حسب رقم تعريف المستند. يمكنك تحديد ترتيب البيانات باستخدام
orderBy()
، ويمكنك الحد من عدد المستندات التي يتم استرجاعها باستخدام
limit()
. في حال تحديد limit()
، يجب أن تكون القيمة أكبر من أو تساوي
الصفر.
على سبيل المثال، يمكنك البحث عن أوّل 3 مدن أبجديًا باستخدام:
import { query, orderBy, limit } from "firebase/firestore"; const q = query(citiesRef, orderBy("name"), limit(3));
citiesRef.orderBy("name").limit(3);
citiesRef.order(by: "name").limit(to: 3)
[[citiesRef queryOrderedByField:@"name"] queryLimitedTo:3];
citiesRef.orderBy("name").limit(3)
citiesRef.orderBy("name").limit(3);
final citiesRef = db.collection("cities"); citiesRef.orderBy("name").limit(3);
cities_ref.OrderBy("name").Limit(3);
PHP
لمزيد من المعلومات عن تثبيت وإنشاء عملاء Cloud Firestore، يُرجى الرجوع إلى مكتبات عملاء Cloud Firestore.
Query query = citiesRef.OrderBy("Name").Limit(3);
يمكنك أيضًا الترتيب تنازليًا للحصول على آخر 3 مدن:
import { query, orderBy, limit } from "firebase/firestore"; const q = query(citiesRef, orderBy("name", "desc"), limit(3));
citiesRef.orderBy("name", "desc").limit(3);
citiesRef.order(by: "name", descending: true).limit(to: 3)
[[citiesRef queryOrderedByField:@"name" descending:YES] queryLimitedTo:3];
citiesRef.orderBy("name", Query.Direction.DESCENDING).limit(3)
citiesRef.orderBy("name", Direction.DESCENDING).limit(3);
final citiesRef = db.collection("cities"); citiesRef.orderBy("name", descending: true).limit(3);
cities_ref.OrderBy("name", Query::Direction::kDescending).Limit(3);
PHP
لمزيد من المعلومات عن تثبيت وإنشاء عملاء Cloud Firestore، يُرجى الرجوع إلى مكتبات عملاء Cloud Firestore.
Query query = citiesRef.OrderByDescending("Name").Limit(3);
يمكنك أيضًا الترتيب حسب حقول متعددة. على سبيل المثال، إذا أردت الترتيب حسب الولاية، وضمن كل ولاية الترتيب حسب عدد السكان تنازليًا:
import { query, orderBy } from "firebase/firestore"; const q = query(citiesRef, orderBy("state"), orderBy("population", "desc"));
citiesRef.orderBy("state").orderBy("population", "desc");
citiesRef .order(by: "state") .order(by: "population", descending: true)
[[citiesRef queryOrderedByField:@"state"] queryOrderedByField:@"population" descending:YES];
citiesRef.orderBy("state").orderBy("population", Query.Direction.DESCENDING)
citiesRef.orderBy("state").orderBy("population", Direction.DESCENDING);
final citiesRef = db.collection("cities"); citiesRef.orderBy("state").orderBy("population", descending: true);
cities_ref.OrderBy("state").OrderBy("name", Query::Direction::kDescending);
PHP
لمزيد من المعلومات عن تثبيت وإنشاء عملاء Cloud Firestore، يُرجى الرجوع إلى مكتبات عملاء Cloud Firestore.
Query query = citiesRef.OrderBy("State").OrderByDescending("Population");
يمكنك دمج فلاتر where()
مع orderBy()
وlimit()
. في المثال التالي، تحدِّد طلبات البحث حدًا أدنى للسكان، ويتم ترتيبها حسب عدد السكان
بترتيب تصاعدي، ولا يتم عرض سوى النتائج القليلة الأولى التي تتجاوز
الحدّ الأدنى:
import { query, where, orderBy, limit } from "firebase/firestore"; const q = query(citiesRef, where("population", ">", 100000), orderBy("population"), limit(2));
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];
citiesRef.whereGreaterThan("population", 100000).orderBy("population").limit(2)
citiesRef.whereGreaterThan("population", 100000).orderBy("population").limit(2);
final citiesRef = db.collection("cities"); citiesRef .where("population", isGreaterThan: 100000) .orderBy("population") .limit(2);
cities_ref.WhereGreaterThan("population", FieldValue::Integer(100000)) .OrderBy("population") .Limit(2);
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”);