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

يوفّر Cloud Firestore وظيفة استعلام فعّالة لتحديد المستندات التي تريد استردادها من مجموعة. يمكن أيضًا استخدام طلبات البحث هذه مع get() أو addSnapshotListener()، كما هو موضّح في الحصول على البيانات.

ترتيب البيانات والحدّ الأقصى لها

يسترجع طلب البحث تلقائيًا جميع المستندات التي تستوفي طلب البحث بترتيب تصاعدي حسب رقم تعريف المستند. يمكنك تحديد ترتيب البيانات باستخدام orderBy()، ويمكنك الحد من عدد المستندات التي يتم استرجاعها باستخدام limit(). في حال تحديد limit()، يجب أن تكون القيمة أكبر من أو تساوي الصفر.

على سبيل المثال، يمكنك البحث عن أوّل 3 مدن أبجديًا باستخدام:

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

const q = query(citiesRef, orderBy("name"), limit(3));
citiesRef.orderBy("name").limit(3);
ملاحظة: لا يتوفّر هذا المنتج على أجهزة watchOS وأهداف تطبيقات Apple Clips.
citiesRef.order(by: "name").limit(to: 3)
ملاحظة: لا يتوفّر هذا المنتج على أجهزة watchOS وأهداف تطبيقات Apple Clips.
[[citiesRef queryOrderedByField:@"name"] queryLimitedTo:3];
citiesRef.orderBy("name").limit(3)
citiesRef.orderBy("name").limit(3);
final citiesRef = db.collection("cities");
citiesRef.orderBy("name").limit(3);
Query query = cities.orderBy("name").limit(3);
Query query = cities.orderBy("name").limitToLast(3);
cities_ref = db.collection("cities")
query = cities_ref.order_by("name").limit_to_last(2)
results = query.get()
cities_ref = db.collection("cities")
query = cities_ref.order_by("name").limit_to_last(2)
results = await query.get()
cities_ref.OrderBy("name").Limit(3);
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

لمزيد من المعلومات عن تثبيت وإنشاء عملاء Cloud Firestore، يُرجى الرجوع إلى مكتبات عملاء Cloud Firestore.

$query = $citiesRef->orderBy('name')->limit(3);
Query query = citiesRef.OrderBy("Name").Limit(3);
Query query = citiesRef.OrderBy("Name").Limit(3);
query = cities_ref.order("name").limit(3)

يمكنك أيضًا الترتيب تنازليًا للحصول على آخر 3 مدن:

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

const q = query(citiesRef, orderBy("name", "desc"), limit(3));
citiesRef.orderBy("name", "desc").limit(3);
ملاحظة: لا يتوفّر هذا المنتج على أجهزة watchOS وأهداف تطبيقات Apple Clips.
citiesRef.order(by: "name", descending: true).limit(to: 3)
ملاحظة: لا يتوفّر هذا المنتج على أجهزة watchOS وأهداف تطبيقات Apple Clips.
[[citiesRef queryOrderedByField:@"name" descending:YES] queryLimitedTo:3];
citiesRef.orderBy("name", Query.Direction.DESCENDING).limit(3)
citiesRef.orderBy("name", Direction.DESCENDING).limit(3);
final citiesRef = db.collection("cities");
citiesRef.orderBy("name", descending: true).limit(3);
Query query = cities.orderBy("name", Direction.DESCENDING).limit(3);
cities_ref = db.collection("cities")
query = cities_ref.order_by("name", direction=firestore.Query.DESCENDING).limit(3)
results = query.stream()
cities_ref = db.collection("cities")
query = cities_ref.order_by("name", direction=firestore.Query.DESCENDING).limit(3)
results = query.stream()
cities_ref.OrderBy("name", Query::Direction::kDescending).Limit(3);
const lastThreeRes = await citiesRef.orderBy('name', 'desc').limit(3).get();
query := cities.OrderBy("name", firestore.Desc).Limit(3)

PHP

لمزيد من المعلومات عن تثبيت وإنشاء عملاء Cloud Firestore، يُرجى الرجوع إلى مكتبات عملاء Cloud Firestore.

$query = $citiesRef->orderBy('name', 'DESC')->limit(3);
Query query = citiesRef.OrderByDescending("Name").Limit(3);
Query query = citiesRef.OrderByDescending("Name").Limit(3);
query = cities_ref.order("name", "desc").limit(3)

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

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

const q = query(citiesRef, orderBy("state"), orderBy("population", "desc"));
citiesRef.orderBy("state").orderBy("population", "desc");
ملاحظة: لا يتوفّر هذا المنتج على أجهزة watchOS وأهداف تطبيقات Apple Clips.
citiesRef
  .order(by: "state")
  .order(by: "population", descending: true)
ملاحظة: لا يتوفّر هذا المنتج على أجهزة watchOS وأهداف تطبيقات Apple Clips.
[[citiesRef queryOrderedByField:@"state"] queryOrderedByField:@"population" descending:YES];
citiesRef.orderBy("state").orderBy("population", Query.Direction.DESCENDING)
citiesRef.orderBy("state").orderBy("population", Direction.DESCENDING);
final citiesRef = db.collection("cities");
citiesRef.orderBy("state").orderBy("population", descending: true);
Query query = cities.orderBy("state").orderBy("population", Direction.DESCENDING);
cities_ref = db.collection("cities")
ordered_city_ref = cities_ref.order_by("state").order_by(
    "population", direction=firestore.Query.DESCENDING
)
cities_ref = db.collection("cities")
cities_ref.order_by("state").order_by(
    "population", direction=firestore.Query.DESCENDING
)
cities_ref.OrderBy("state").OrderBy("name", Query::Direction::kDescending);
const byStateByPopRes = await citiesRef.orderBy('state').orderBy('population', 'desc').get();
query := client.Collection("cities").OrderBy("state", firestore.Asc).OrderBy("population", firestore.Desc)

PHP

لمزيد من المعلومات عن تثبيت وإنشاء عملاء Cloud Firestore، يُرجى الرجوع إلى مكتبات عملاء Cloud Firestore.

$query = $citiesRef->orderBy('state')->orderBy('population', 'DESC');
Query query = citiesRef.OrderBy("State").OrderByDescending("Population");
Query query = citiesRef.OrderBy("State").OrderByDescending("Population");
query = cities_ref.order("state").order("population", "desc")

يمكنك دمج فلاتر where() مع orderBy() وlimit(). في المثال التالي، تحدِّد طلبات البحث حدًا أدنى للسكان، ويتم ترتيبها حسب عدد السكان بترتيب تصاعدي، ولا يتم عرض سوى النتائج القليلة الأولى التي تتجاوز الحدّ الأدنى:

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

const q = query(citiesRef, where("population", ">", 100000), orderBy("population"), limit(2));
citiesRef.where("population", ">", 100000).orderBy("population").limit(2);
ملاحظة: لا يتوفّر هذا المنتج على أجهزة watchOS وأهداف تطبيقات Apple Clips.
citiesRef
  .whereField("population", isGreaterThan: 100000)
  .order(by: "population")
  .limit(to: 2)
ملاحظة: لا يتوفّر هذا المنتج على أجهزة watchOS وأهداف تطبيقات Apple Clips.
[[[citiesRef queryWhereField:@"population" isGreaterThan:@100000]
    queryOrderedByField:@"population"]
    queryLimitedTo:2];
citiesRef.whereGreaterThan("population", 100000).orderBy("population").limit(2)
citiesRef.whereGreaterThan("population", 100000).orderBy("population").limit(2);
final citiesRef = db.collection("cities");
citiesRef
    .where("population", isGreaterThan: 100000)
    .orderBy("population")
    .limit(2);
Query query = cities.whereGreaterThan("population", 2500000L).orderBy("population").limit(2);
cities_ref = db.collection("cities")
query = (
    cities_ref.where(filter=FieldFilter("population", ">", 2500000))
    .order_by("population")
    .limit(2)
)
results = query.stream()
cities_ref = db.collection("cities")
query = (
    cities_ref.where(filter=FieldFilter("population", ">", 2500000))
    .order_by("population")
    .limit(2)
)
results = query.stream()
cities_ref.WhereGreaterThan("population", FieldValue::Integer(100000))
    .OrderBy("population")
    .Limit(2);
const biggestRes = await citiesRef.where('population', '>', 2500000)
  .orderBy('population').limit(2).get();
query := cities.Where("population", ">", 2500000).OrderBy("population", firestore.Desc).Limit(2)

PHP

لمزيد من المعلومات عن تثبيت وإنشاء عملاء Cloud Firestore، يُرجى الرجوع إلى مكتبات عملاء Cloud Firestore.

$query = $citiesRef
    ->where('population', '>', 2500000)
    ->orderBy('population')
    ->limit(2);
Query query = citiesRef
    .WhereGreaterThan("Population", 2500000)
    .OrderBy("Population")
    .Limit(2);
Query query = citiesRef
    .WhereGreaterThan("Population", 2500000)
    .OrderBy("Population")
    .Limit(2);
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);