يوفر Cloud Firestore وظائف استعلام قوية لتحديد المستندات التي تريد استردادها من مجموعة. يمكن أيضًا استخدام هذه الاستعلامات مع get()
أو addSnapshotListener()
، كما هو موضح في Get Data .
طلب البيانات والحد منها
بشكل افتراضي ، يقوم الاستعلام باسترداد جميع المستندات التي تلبي الاستعلام بترتيب تصاعدي حسب معرف المستند. يمكنك تحديد ترتيب الفرز لبياناتك باستخدام orderBy()
، ويمكنك تحديد عدد المستندات المستردة باستخدام limit()
. إذا حددت limit()
، يجب أن تكون القيمة أكبر من الصفر أو مساوية له.
على سبيل المثال ، يمكنك الاستعلام عن أول 3 مدن أبجديًا باستخدام:
Web version 9
import { query, orderBy, limit } from "firebase/firestore"; const q = query(citiesRef, orderBy("name"), limit(3));
Web version 8
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
C ++
cities_ref.OrderBy("name").Limit(3);
Node.js
يذهب
بي أتش بي
بي أتش بي
لمزيد من المعلومات حول تثبيت عميل Cloud Firestore وإنشائه ، راجع مكتبات Cloud Firestore Client Libraries .
وحدة
Query query = citiesRef.OrderBy("Name").Limit(3);
سي #
روبي
يمكنك أيضًا الفرز بترتيب تنازلي للحصول على آخر 3 مدن:
Web version 9
import { query, orderBy, limit } from "firebase/firestore"; const q = query(citiesRef, orderBy("name", "desc"), limit(3));
Web version 8
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
C ++
cities_ref.OrderBy("name", Query::Direction::kDescending).Limit(3);
Node.js
يذهب
بي أتش بي
بي أتش بي
لمزيد من المعلومات حول تثبيت عميل Cloud Firestore وإنشائه ، راجع مكتبات Cloud Firestore Client Libraries .
وحدة
Query query = citiesRef.OrderByDescending("Name").Limit(3);
سي #
روبي
يمكنك أيضًا الطلب من خلال حقول متعددة. على سبيل المثال ، إذا أردت الترتيب حسب الولاية ، وداخل كل ولاية ترتيب حسب السكان بترتيب تنازلي:
Web version 9
import { query, orderBy } from "firebase/firestore"; const q = query(citiesRef, orderBy("state"), orderBy("population", "desc"));
Web version 8
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
C ++
cities_ref.OrderBy("state").OrderBy("name", Query::Direction::kDescending);
Node.js
يذهب
بي أتش بي
بي أتش بي
لمزيد من المعلومات حول تثبيت عميل Cloud Firestore وإنشائه ، راجع مكتبات Cloud Firestore Client Libraries .
وحدة
Query query = citiesRef.OrderBy("State").OrderByDescending("Population");
سي #
روبي
يمكنك دمج عوامل التصفية where()
مع orderBy()
limit()
. في المثال التالي ، تحدد الاستعلامات عتبة المحتوى ، وتُفرز حسب السكان بترتيب تصاعدي ، وتُرجع فقط النتائج القليلة الأولى التي تتجاوز الحد:
Web version 9
import { query, where, orderBy, limit } from "firebase/firestore"; const q = query(citiesRef, where("population", ">", 100000), orderBy("population"), limit(2));
Web version 8
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
C ++
cities_ref.WhereGreaterThan("population", FieldValue::Integer(100000)) .OrderBy("population") .Limit(2);
Node.js
يذهب
بي أتش بي
بي أتش بي
لمزيد من المعلومات حول تثبيت عميل Cloud Firestore وإنشائه ، راجع مكتبات Cloud Firestore Client Libraries .
وحدة
Query query = citiesRef .WhereGreaterThan("Population", 2500000) .OrderBy("Population") .Limit(2);
سي #
روبي
ومع ذلك ، إذا كان لديك مرشح بمقارنة نطاق ( <
، <=
، >
، >=
) ، يجب أن يكون طلبك الأول في نفس الحقل ، انظر قائمة قيود orderBy()
أدناه.
محددات
لاحظ القيود التالية على بنود orderBy()
:
- تعمل عبارة
orderBy()
أيضًا على تصفية وجود الحقول المحددة . لن تتضمن مجموعة النتائج المستندات التي لا تحتوي على الحقول المحددة. إذا قمت بتضمين مرشح بمقارنة نطاق (
<
،<=
،>
،>=
) ، يجب أن يكون طلبك الأول في نفس الحقل:صالح : عامل التصفية
orderBy
في نفس المجالWeb version 9
import { query, where, orderBy } from "firebase/firestore"; const q = query(citiesRef, where("population", ">", 100000), orderBy("population"));
Web version 8
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 Client Libraries .
وحدة
Query query = citiesRef .WhereGreaterThan("Population", 2500000) .OrderBy("Population");
سي #
روبي
غير صالح : نطاق التصفية
orderBy
الأول حسب الحقول المختلفةWeb version 9
import { query, where, orderBy } from "firebase/firestore"; const q = query(citiesRef, where("population", ">", 100000), orderBy("country"));
Web version 8
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
C ++
// BAD EXAMPLE -- will crash the program: cities_ref.WhereGreaterThan("population", FieldValue::Integer(100000)) .OrderBy("country");
Node.js
يذهب
بي أتش بي
بي أتش بي
لمزيد من المعلومات حول تثبيت عميل Cloud Firestore وإنشائه ، راجع مكتبات Cloud Firestore Client Libraries .
وحدة
Query query = citiesRef .WhereGreaterThan("Population", 2500000) .OrderBy("Country");
سي #
روبي
- لا يمكنك ترتيب استفسارك بأي حقل مضمن في المساواة (
=
) أوin
البند.
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”);