Catch up on everything announced at Firebase Summit, and learn how Firebase can help you accelerate app development and run your app with confidence. Learn More

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

تنظيم صفحاتك في مجموعات يمكنك حفظ المحتوى وتصنيفه حسب إعداداتك المفضّلة.

يوفر Cloud Firestore وظائف استعلام قوية لتحديد المستندات التي تريد استردادها من مجموعة. يمكن أيضًا استخدام هذه الاستعلامات مع get() أو addSnapshotListener() ، كما هو موضح في Get Data .

طلب البيانات والحد منها

بشكل افتراضي ، يقوم الاستعلام باسترداد جميع المستندات التي تلبي الاستعلام بترتيب تصاعدي حسب معرف المستند. يمكنك تحديد ترتيب الفرز لبياناتك باستخدام orderBy() ، ويمكنك تحديد عدد المستندات المستردة باستخدام 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);
سويفت
ملاحظة: هذا المنتج غير متوفر على أهداف watchOS و App Clip.
citiesRef.order(by: "name").limit(to: 3)
ج موضوعية
ملاحظة: هذا المنتج غير متوفر على أهداف watchOS و App Clip.
[[citiesRef queryOrderedByField:@"name"] queryLimitedTo:3];

Java

citiesRef.orderBy("name").limit(3);

Kotlin+KTX

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);
بايثون
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)
بي أتش بي

بي أتش بي

لمزيد من المعلومات حول تثبيت عميل Cloud Firestore وإنشائه ، راجع مكتبات Cloud Firestore Client Libraries .

$query = $citiesRef->orderBy('name')->limit(3);
وحدة
Query query = citiesRef.OrderBy("Name").Limit(3);
سي #

سي #

لمزيد من المعلومات حول تثبيت عميل Cloud Firestore وإنشائه ، راجع مكتبات Cloud Firestore Client Libraries .

Query query = citiesRef.OrderBy("Name").Limit(3);
روبي
query = cities_ref.order("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);
سويفت
ملاحظة: هذا المنتج غير متوفر على أهداف watchOS و App Clip.
citiesRef.order(by: "name", descending: true).limit(to: 3)
ج موضوعية
ملاحظة: هذا المنتج غير متوفر على أهداف watchOS و App Clip.
[[citiesRef queryOrderedByField:@"name" descending:YES] queryLimitedTo:3];

Java

citiesRef.orderBy("name", Direction.DESCENDING).limit(3);

Kotlin+KTX

citiesRef.orderBy("name", Query.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);
بايثون
cities_ref = db.collection(u'cities')
query = cities_ref.order_by(
    u'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)
بي أتش بي

بي أتش بي

لمزيد من المعلومات حول تثبيت عميل Cloud Firestore وإنشائه ، راجع مكتبات Cloud Firestore Client Libraries .

$query = $citiesRef->orderBy('name', 'DESC')->limit(3);
وحدة
Query query = citiesRef.OrderByDescending("Name").Limit(3);
سي #

سي #

لمزيد من المعلومات حول تثبيت عميل Cloud Firestore وإنشائه ، راجع مكتبات Cloud Firestore Client Libraries .

Query query = citiesRef.OrderByDescending("Name").Limit(3);
روبي
query = cities_ref.order("name", "desc").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");
سويفت
ملاحظة: هذا المنتج غير متوفر على أهداف watchOS و App Clip.
citiesRef
    .order(by: "state")
    .order(by: "population", descending: true)
ج موضوعية
ملاحظة: هذا المنتج غير متوفر على أهداف watchOS و App Clip.
[[citiesRef queryOrderedByField:@"state"] queryOrderedByField:@"population" descending:YES];

Java

citiesRef.orderBy("state").orderBy("population", Direction.DESCENDING);

Kotlin+KTX

citiesRef.orderBy("state").orderBy("population", Query.Direction.DESCENDING)

Dart

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(u'cities')
cities_ref.order_by(u'state').order_by(
    u'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)
بي أتش بي

بي أتش بي

لمزيد من المعلومات حول تثبيت عميل Cloud Firestore وإنشائه ، راجع مكتبات Cloud Firestore Client Libraries .

$query = $citiesRef->orderBy('state')->orderBy('population', 'DESC');
وحدة
Query query = citiesRef.OrderBy("State").OrderByDescending("Population");
سي #

سي #

لمزيد من المعلومات حول تثبيت عميل Cloud Firestore وإنشائه ، راجع مكتبات Cloud Firestore Client Libraries .

Query query = citiesRef.OrderBy("State").OrderByDescending("Population");
روبي
query = cities_ref.order("state").order("population", "desc")

يمكنك دمج عوامل التصفية 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);
سويفت
ملاحظة: هذا المنتج غير متوفر على أهداف watchOS و App Clip.
citiesRef
    .whereField("population", isGreaterThan: 100000)
    .order(by: "population")
    .limit(to: 2)
ج موضوعية
ملاحظة: هذا المنتج غير متوفر على أهداف watchOS و App Clip.
[[[citiesRef queryWhereField:@"population" isGreaterThan:@100000]
    queryOrderedByField:@"population"]
    queryLimitedTo:2];

Java

citiesRef.whereGreaterThan("population", 100000).orderBy("population").limit(2);

Kotlin+KTX

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);
بايثون
cities_ref = db.collection(u'cities')
query = cities_ref.where(
    u'population', u'>', 2500000).order_by(u'population').limit(2)
results = query.stream()

Python

cities_ref = db.collection("cities")
query = cities_ref.where("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)
بي أتش بي

بي أتش بي

لمزيد من المعلومات حول تثبيت عميل Cloud Firestore وإنشائه ، راجع مكتبات Cloud Firestore Client Libraries .

$query = $citiesRef
    ->where('population', '>', 2500000)
    ->orderBy('population')
    ->limit(2);
وحدة
Query query = citiesRef
    .WhereGreaterThan("Population", 2500000)
    .OrderBy("Population")
    .Limit(2);
سي #

سي #

لمزيد من المعلومات حول تثبيت عميل Cloud Firestore وإنشائه ، راجع مكتبات Cloud Firestore Client Libraries .

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() أيضًا على تصفية وجود الحقول المحددة. لن تتضمن مجموعة النتائج المستندات التي لا تحتوي على الحقول المحددة.
  • إذا قمت بتضمين مرشح بمقارنة نطاق ( < ، <= ، > ، >= ) ، يجب أن يكون طلبك الأول في نفس الحقل:

    صالح : عامل التصفية 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"];

    Java

    citiesRef.whereGreaterThan("population", 100000).orderBy("population");

    Kotlin+KTX

    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");
    بايثون
    cities_ref = db.collection(u'cities')
    query = cities_ref.where(
        u'population', u'>', 2500000).order_by(u'population')
    results = query.stream()

    Python

    cities_ref = db.collection("cities")
    query = cities_ref.where("population", ">", 2500000).order_by("population")
    results = query.stream()
    Node.js
    citiesRef.where('population', '>', 2500000).orderBy('population');
    يذهب
    query := cities.Where("population", ">", 2500000).OrderBy("population", firestore.Asc)
    بي أتش بي

    بي أتش بي

    لمزيد من المعلومات حول تثبيت عميل Cloud Firestore وإنشائه ، راجع مكتبات Cloud Firestore Client Libraries .

    $query = $citiesRef
        ->where('population', '>', 2500000)
        ->orderBy('population');
    وحدة
    Query query = citiesRef
        .WhereGreaterThan("Population", 2500000)
        .OrderBy("Population");
    سي #

    سي #

    لمزيد من المعلومات حول تثبيت عميل Cloud Firestore وإنشائه ، راجع مكتبات Cloud Firestore Client Libraries .

    Query query = citiesRef
        .WhereGreaterThan("Population", 2500000)
        .OrderBy("Population");
    روبي
    query = cities_ref.where("population", ">", 2_500_000).order("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"];

    Java

    citiesRef.whereGreaterThan("population", 100000).orderBy("country");

    Kotlin+KTX

    citiesRef.whereGreaterThan("population", 100000).orderBy("country")

    Dart

    final citiesRef = db.collection("cities");
    citiesRef.where("population", isGreaterThan: 100000).orderBy("country");
    جافا
    Query query = cities.whereGreaterThan("population", 2500000L).orderBy("country");
    بايثون
    cities_ref = db.collection(u'cities')
    query = cities_ref.where(u'population', u'>', 2500000).order_by(u'country')
    results = query.stream()

    Python

    cities_ref = db.collection("cities")
    query = cities_ref.where("population", ">", 2500000).order_by("country")
    results = query.stream()
    C ++
    // BAD EXAMPLE -- will crash the program:
    cities_ref.WhereGreaterThan("population", FieldValue::Integer(100000))
        .OrderBy("country");
    Node.js
    citiesRef.where('population', '>', 2500000).orderBy('country');
    يذهب
    // Note: This is an invalid query. It violates the constraint that range
    // and order by are required to be on the same field.
    query := cities.Where("population", ">", 2500000).OrderBy("country", firestore.Asc)
    بي أتش بي

    بي أتش بي

    لمزيد من المعلومات حول تثبيت عميل Cloud Firestore وإنشائه ، راجع مكتبات Cloud Firestore Client Libraries .

    $invalidRangeQuery = $citiesRef
        ->where('population', '>', 2500000)
        ->orderBy('country');
    وحدة
    Query query = citiesRef
        .WhereGreaterThan("Population", 2500000)
        .OrderBy("Country");
    سي #

    سي #

    لمزيد من المعلومات حول تثبيت عميل Cloud Firestore وإنشائه ، راجع مكتبات Cloud Firestore Client Libraries .

    Query query = citiesRef
        .WhereGreaterThan("Population", 2500000)
        .OrderBy("Country");
    روبي
    query = cities_ref.where("population", ">", 2_500_000).order("country")
  • لا يمكنك ترتيب استفسارك بأي حقل مضمن في المساواة ( = ) أو in البند.