يوفر Cloud Firestore وظيفة استعلام قوية لتحديد المستندات التي تريد استردادها من المجموعة. يمكن أيضًا استخدام هذه الاستعلامات مع get()
أو addSnapshotListener()
، كما هو موضح في Get Data .
ترتيب البيانات والحد منها
بشكل افتراضي، يقوم الاستعلام باسترداد كافة المستندات التي تلبي الاستعلام بترتيب تصاعدي حسب معرف المستند. يمكنك تحديد ترتيب فرز بياناتك باستخدام orderBy()
، ويمكنك تحديد عدد المستندات التي يتم استردادها باستخدام limit()
. إذا قمت بتحديد limit()
، فيجب أن تكون القيمة أكبر من أو تساوي الصفر.
على سبيل المثال، يمكنك الاستعلام عن أول 3 مدن أبجديًا باستخدام:
Web modular API
import { query, orderBy, limit } from "firebase/firestore"; const q = query(citiesRef, orderBy("name"), limit(3));
Web namespaced API
citiesRef.orderBy("name").limit(3);
سويفت
citiesRef.order(by: "name").limit(to: 3)
ج موضوعية
[[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);
جافا
بايثون
Python
سي ++
cities_ref.OrderBy("name").Limit(3);
Node.js
يذهب
بي أتش بي
بي أتش بي
لمعرفة المزيد حول تثبيت وإنشاء عميل Cloud Firestore، راجع مكتبات عميل Cloud Firestore .
وحدة
Query query = citiesRef.OrderBy("Name").Limit(3);
ج#
روبي
يمكنك أيضًا الترتيب تنازليًا للحصول على آخر 3 مدن:
Web modular API
import { query, orderBy, limit } from "firebase/firestore"; const q = query(citiesRef, orderBy("name", "desc"), limit(3));
Web namespaced API
citiesRef.orderBy("name", "desc").limit(3);
سويفت
citiesRef.order(by: "name", descending: true).limit(to: 3)
ج موضوعية
[[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);
جافا
بايثون
Python
سي ++
cities_ref.OrderBy("name", Query::Direction::kDescending).Limit(3);
Node.js
يذهب
بي أتش بي
بي أتش بي
لمعرفة المزيد حول تثبيت وإنشاء عميل Cloud Firestore، راجع مكتبات عميل Cloud Firestore .
وحدة
Query query = citiesRef.OrderByDescending("Name").Limit(3);
ج#
روبي
يمكنك أيضًا الطلب حسب حقول متعددة. على سبيل المثال، إذا أردت الترتيب حسب الولاية، وداخل كل ولاية، قم بالترتيب حسب عدد السكان بترتيب تنازلي:
Web modular API
import { query, orderBy } from "firebase/firestore"; const q = query(citiesRef, orderBy("state"), orderBy("population", "desc"));
Web namespaced API
citiesRef.orderBy("state").orderBy("population", "desc");
سويفت
citiesRef .order(by: "state") .order(by: "population", descending: true)
ج موضوعية
[[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);
جافا
بايثون
Python
سي ++
cities_ref.OrderBy("state").OrderBy("name", Query::Direction::kDescending);
Node.js
يذهب
بي أتش بي
بي أتش بي
لمعرفة المزيد حول تثبيت وإنشاء عميل Cloud Firestore، راجع مكتبات عميل Cloud Firestore .
وحدة
Query query = citiesRef.OrderBy("State").OrderByDescending("Population");
ج#
روبي
يمكنك دمج مرشحات where()
مع orderBy()
و limit()
. في المثال التالي، تحدد الاستعلامات عتبة المحتوى، وتفرز حسب المحتوى بترتيب تصاعدي، وتُرجع فقط النتائج القليلة الأولى التي تتجاوز الحد:
Web modular API
import { query, where, orderBy, limit } from "firebase/firestore"; const q = query(citiesRef, where("population", ">", 100000), orderBy("population"), limit(2));
Web namespaced API
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];
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);
جافا
بايثون
Python
سي ++
cities_ref.WhereGreaterThan("population", FieldValue::Integer(100000)) .OrderBy("population") .Limit(2);
Node.js
يذهب
بي أتش بي
بي أتش بي
لمعرفة المزيد حول تثبيت وإنشاء عميل Cloud Firestore، راجع مكتبات عميل Cloud Firestore .
وحدة
Query query = citiesRef .WhereGreaterThan("Population", 2500000) .OrderBy("Population") .Limit(2);
ج#
روبي
ومع ذلك، إذا كان لديك مرشح بمقارنة نطاق ( <
, <=
, >
, >=
)، فيجب أن يكون طلبك الأول في نفس الحقل، راجع قائمة قيود orderBy()
أدناه.
محددات
لاحظ القيود التالية لعبارات orderBy()
:
- تقوم جملة
orderBy()
أيضًا بتصفية وجود الحقول المحددة . لن تتضمن مجموعة النتائج المستندات التي لا تحتوي على الحقول المحددة. إذا قمت بتضمين مرشح مع مقارنة النطاق (
<
,<=
,>
,>=
)، فيجب أن يكون الترتيب الأول في نفس الحقل:صالح : عامل تصفية النطاق
orderBy
في نفس الحقلWeb modular API
import { query, where, orderBy } from "firebase/firestore"; const q = query(citiesRef, where("population", ">", 100000), orderBy("population"));
Web namespaced API
citiesRef.where("population", ">", 100000).orderBy("population");
سويفت
ملاحظة: هذا المنتج غير متوفر في أنظمة watchOS وApp Clip.citiesRef .whereField("population", isGreaterThan: 100000) .order(by: "population")
ج موضوعية
ملاحظة: هذا المنتج غير متوفر في أنظمة watchOS وApp Clip.[[citiesRef queryWhereField:@"population" isGreaterThan:@100000] queryOrderedByField:@"population"];
Kotlin+KTX
citiesRef.whereGreaterThan("population", 100000).orderBy("population")
Java
citiesRef.whereGreaterThan("population", 100000).orderBy("population");
Dart
final citiesRef = db.collection("cities"); citiesRef.where("population", isGreaterThan: 100000).orderBy("population");
جافا
Query query = cities.whereGreaterThan("population", 2500000L).orderBy("population");
بايثون
Python
Node.js
يذهب
بي أتش بي
بي أتش بي
لمعرفة المزيد حول تثبيت وإنشاء عميل Cloud Firestore، راجع مكتبات عميل Cloud Firestore .
وحدة
Query query = citiesRef .WhereGreaterThan("Population", 2500000) .OrderBy("Population");
ج#
روبي
غير صالح : عامل تصفية النطاق
orderBy
الأول في حقول مختلفةWeb modular API
import { query, where, orderBy } from "firebase/firestore"; const q = query(citiesRef, where("population", ">", 100000), orderBy("country"));
Web namespaced API
citiesRef.where("population", ">", 100000).orderBy("country");
سويفت
ملاحظة: هذا المنتج غير متوفر في أنظمة watchOS وApp Clip.citiesRef .whereField("population", isGreaterThan: 100000) .order(by: "country")
ج موضوعية
ملاحظة: هذا المنتج غير متوفر في أنظمة watchOS وApp Clip.[[citiesRef queryWhereField:@"population" isGreaterThan:@100000] queryOrderedByField:@"country"];
Kotlin+KTX
citiesRef.whereGreaterThan("population", 100000).orderBy("country")
Java
citiesRef.whereGreaterThan("population", 100000).orderBy("country");
Dart
final citiesRef = db.collection("cities"); citiesRef.where("population", isGreaterThan: 100000).orderBy("country");
جافا
بايثون
Python
سي ++
// BAD EXAMPLE -- will crash the program: cities_ref.WhereGreaterThan("population", FieldValue::Integer(100000)) .OrderBy("country");
Node.js
يذهب
بي أتش بي
بي أتش بي
لمعرفة المزيد حول تثبيت وإنشاء عميل Cloud Firestore، راجع مكتبات عميل Cloud Firestore .
وحدة
Query query = citiesRef .WhereGreaterThan("Population", 2500000) .OrderBy("Country");
ج#
روبي
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”);