توفّر 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”);