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