توفّر 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
citiesRef.orderBy("name").limit(3)
Java
citiesRef.orderBy("name").limit(3);
Dart
final citiesRef = db.collection("cities"); citiesRef.orderBy("name").limit(3);
Java
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
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);
Java
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
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);
Java
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
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);
Java
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 فيها، حتى إذا كانت تستوفي فلاتر طلب البحث.
Java
db.collection("cities").whereEqualTo("country", “USA”).orderBy(“population”);
وينطبق تأثير ذو صلة على حالات عدم المساواة. يشير طلب البحث الذي يتضمّن فلتر عدم المساواة
في أحد الحقول أيضًا إلى الترتيب حسب هذا الحقل. لا يعرض طلب البحث التالي المستندات التي لا تتضمّن الحقل population حتى إذا كان country = USA في ذلك المستند . كحلّ بديل، يمكنك تنفيذ طلبات بحث منفصلة لكل ترتيب أو يمكنك تحديد قيمة لجميع الحقول التي تريد ترتيبها.
Java
db.collection(“cities”).where(or(“country”, USA”), greaterThan(“population”, 250000));
يتضمّن طلب البحث أعلاه ترتيبًا ضمنيًا حسب عدم المساواة، وهو مكافئ لما يلي:
Java
db.collection(“cities”).where(or(“country”, USA”), greaterThan(“population”, 250000)).orderBy(“population”);