طلب البيانات والحد منها باستخدام Cloud Firestore

توفّر 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
ملاحظة: لا يتوفّر هذا المنتج ضمن نظامَي التشغيل WatchOS وApp Clip.
citiesRef.order(by: "name").limit(to: 3)
Objective-C
ملاحظة: لا يتوفّر هذا المنتج ضمن نظامَي التشغيل WatchOS وApp Clip.
[[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);
جافا
Query query = cities.orderBy("name").limit(3);
Query query = cities.orderBy("name").limitToLast(3);
Python
cities_ref = db.collection("cities")
query = cities_ref.order_by("name").limit_to_last(2)
results = query.get()

Python

cities_ref = db.collection("cities")
query = cities_ref.order_by("name").limit_to_last(2)
results = await query.get()
C++‎
cities_ref.OrderBy("name").Limit(3);
Node.js
const firstThreeRes = await citiesRef.orderBy('name').limit(3).get();
انتقال
query := cities.OrderBy("name", firestore.Asc).Limit(3)
query := cities.OrderBy("name", firestore.Asc).LimitToLast(3)
PHP

PHP

لمزيد من المعلومات عن تثبيت برنامج "Cloud Firestore" وإنشائه، يمكنك الاطّلاع على مكتبات عملاء Cloud Firestore.

$query = $citiesRef->orderBy('name')->limit(3);
Unity
Query query = citiesRef.OrderBy("Name").Limit(3);
#C
Query query = citiesRef.OrderBy("Name").Limit(3);
لغة Ruby
query = cities_ref.order("name").limit(3)

يمكنك أيضًا الترتيب تنازليًا لعرض آخر 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
ملاحظة: لا يتوفّر هذا المنتج ضمن نظامَي التشغيل WatchOS وApp Clip.
citiesRef.order(by: "name", descending: true).limit(to: 3)
Objective-C
ملاحظة: لا يتوفّر هذا المنتج ضمن نظامَي التشغيل WatchOS وApp Clip.
[[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);
جافا
Query query = cities.orderBy("name", Direction.DESCENDING).limit(3);
Python
cities_ref = db.collection("cities")
query = cities_ref.order_by("name", direction=firestore.Query.DESCENDING).limit(3)
results = query.stream()

Python

cities_ref = db.collection("cities")
query = cities_ref.order_by("name", direction=firestore.Query.DESCENDING).limit(3)
results = query.stream()
C++‎
cities_ref.OrderBy("name", Query::Direction::kDescending).Limit(3);
Node.js
const lastThreeRes = await citiesRef.orderBy('name', 'desc').limit(3).get();
انتقال
query := cities.OrderBy("name", firestore.Desc).Limit(3)
PHP

PHP

لمزيد من المعلومات عن تثبيت برنامج "Cloud Firestore" وإنشائه، يمكنك الاطّلاع على مكتبات عملاء Cloud Firestore.

$query = $citiesRef->orderBy('name', 'DESC')->limit(3);
Unity
Query query = citiesRef.OrderByDescending("Name").Limit(3);
#C
Query query = citiesRef.OrderByDescending("Name").Limit(3);
لغة Ruby
query = cities_ref.order("name", "desc").limit(3)

ويمكنك أيضًا الترتيب حسب عدة حقول. على سبيل المثال، إذا أردت الطلب حسب الولاية، وداخل كل ولاية حسب عدد السكان بترتيب تنازلي:

Web

import { query, orderBy } from "firebase/firestore";  

const q = query(citiesRef, orderBy("state"), orderBy("population", "desc"));

Web

citiesRef.orderBy("state").orderBy("population", "desc");
Swift
ملاحظة: لا يتوفّر هذا المنتج ضمن نظامَي التشغيل WatchOS وApp Clip.
citiesRef
  .order(by: "state")
  .order(by: "population", descending: true)
Objective-C
ملاحظة: لا يتوفّر هذا المنتج ضمن نظامَي التشغيل WatchOS وApp Clip.
[[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);
جافا
Query query = cities.orderBy("state").orderBy("population", Direction.DESCENDING);
Python
cities_ref = db.collection("cities")
ordered_city_ref = cities_ref.order_by("state").order_by(
    "population", direction=firestore.Query.DESCENDING
)

Python

cities_ref = db.collection("cities")
cities_ref.order_by("state").order_by(
    "population", direction=firestore.Query.DESCENDING
)
C++‎
cities_ref.OrderBy("state").OrderBy("name", Query::Direction::kDescending);
Node.js
const byStateByPopRes = await citiesRef.orderBy('state').orderBy('population', 'desc').get();
انتقال
query := client.Collection("cities").OrderBy("state", firestore.Asc).OrderBy("population", firestore.Desc)
PHP

PHP

لمزيد من المعلومات عن تثبيت برنامج "Cloud Firestore" وإنشائه، يمكنك الاطّلاع على مكتبات عملاء Cloud Firestore.

$query = $citiesRef->orderBy('state')->orderBy('population', 'DESC');
Unity
Query query = citiesRef.OrderBy("State").OrderByDescending("Population");
#C
Query query = citiesRef.OrderBy("State").OrderByDescending("Population");
لغة Ruby
query = cities_ref.order("state").order("population", "desc")

يمكنك الجمع بين 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
ملاحظة: لا يتوفّر هذا المنتج ضمن نظامَي التشغيل WatchOS وApp Clip.
citiesRef
  .whereField("population", isGreaterThan: 100000)
  .order(by: "population")
  .limit(to: 2)
Objective-C
ملاحظة: لا يتوفّر هذا المنتج ضمن نظامَي التشغيل WatchOS وApp Clip.
[[[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);
جافا
Query query = cities.whereGreaterThan("population", 2500000L).orderBy("population").limit(2);
Python
cities_ref = db.collection("cities")
query = (
    cities_ref.where(filter=FieldFilter("population", ">", 2500000))
    .order_by("population")
    .limit(2)
)
results = query.stream()

Python

cities_ref = db.collection("cities")
query = (
    cities_ref.where(filter=FieldFilter("population", ">", 2500000))
    .order_by("population")
    .limit(2)
)
results = query.stream()
C++‎
cities_ref.WhereGreaterThan("population", FieldValue::Integer(100000))
    .OrderBy("population")
    .Limit(2);
Node.js
const biggestRes = await citiesRef.where('population', '>', 2500000)
  .orderBy('population').limit(2).get();
انتقال
query := cities.Where("population", ">", 2500000).OrderBy("population", firestore.Desc).Limit(2)
PHP

PHP

لمزيد من المعلومات عن تثبيت برنامج "Cloud Firestore" وإنشائه، يمكنك الاطّلاع على مكتبات عملاء Cloud Firestore.

$query = $citiesRef
    ->where('population', '>', 2500000)
    ->orderBy('population')
    ->limit(2);
Unity
Query query = citiesRef
    .WhereGreaterThan("Population", 2500000)
    .OrderBy("Population")
    .Limit(2);
#C
Query query = citiesRef
    .WhereGreaterThan("Population", 2500000)
    .OrderBy("Population")
    .Limit(2);
لغة Ruby
query = cities_ref.where("population", ">", 2_500_000).order("population").limit(2)

ومع ذلك، إذا كان لديك فلتر بمقارنة نطاق (<، <=، >، >=)، يجب أن يكون طلبك الأول في الحقل نفسه. اطّلِع على قائمة orderBy(). القيود أدناه.

القيود

لاحِظ القيد التالي لفقرات orderBy():

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);