طلب البيانات والحد منها باستخدام 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 وأهداف تطبيقات Apple Clips.
citiesRef.order(by: "name").limit(to: 3)
Objective-C
ملاحظة: لا يتوفّر هذا المنتج على أجهزة watchOS وأهداف تطبيقات Apple Clips.
[[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);
جافا
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 وأهداف تطبيقات Apple Clips.
citiesRef.order(by: "name", descending: true).limit(to: 3)
Objective-C
ملاحظة: لا يتوفّر هذا المنتج على أجهزة watchOS وأهداف تطبيقات Apple Clips.
[[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);
جافا
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 وأهداف تطبيقات Apple Clips.
citiesRef
  .order(by: "state")
  .order(by: "population", descending: true)
Objective-C
ملاحظة: لا يتوفّر هذا المنتج على أجهزة watchOS وأهداف تطبيقات Apple Clips.
[[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);
جافا
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 وأهداف تطبيقات Apple Clips.
citiesRef
  .whereField("population", isGreaterThan: 100000)
  .order(by: "population")
  .limit(to: 2)
Objective-C
ملاحظة: لا يتوفّر هذا المنتج على أجهزة watchOS وأهداف تطبيقات Apple Clips.
[[[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);
جافا
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);