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