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

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

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

بشكل افتراضي، يقوم الاستعلام باسترداد كافة المستندات التي تلبي الاستعلام بترتيب تصاعدي حسب معرف المستند. يمكنك تحديد ترتيب فرز بياناتك باستخدام orderBy() ، ويمكنك تحديد عدد المستندات التي يتم استردادها باستخدام limit() . إذا قمت بتحديد limit() ، فيجب أن تكون القيمة أكبر من أو تساوي الصفر.

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

Web modular API

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

const q = query(citiesRef, orderBy("name"), limit(3));

Web namespaced API

citiesRef.orderBy("name").limit(3);
سويفت
ملاحظة: هذا المنتج غير متوفر في أنظمة watchOS وApp Clip.
citiesRef.order(by: "name").limit(to: 3)
ج موضوعية
ملاحظة: هذا المنتج غير متوفر في أنظمة 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);
بايثون
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()
سي ++
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 .

$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 مدن:

Web modular API

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

const q = query(citiesRef, orderBy("name", "desc"), limit(3));

Web namespaced API

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

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);
بايثون
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()
سي ++
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 .

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

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

Web modular API

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

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

Web namespaced API

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

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);
بايثون
cities_ref = db.collection("cities")
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
)
سي ++
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 .

$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() . في المثال التالي، تحدد الاستعلامات عتبة المحتوى، وتفرز حسب المحتوى بترتيب تصاعدي، وتُرجع فقط النتائج القليلة الأولى التي تتجاوز الحد:

Web modular API

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

const q = query(citiesRef, where("population", ">", 100000), orderBy("population"), limit(2));

Web namespaced API

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

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);
بايثون
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()
سي ++
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 .

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

    صالح : عامل تصفية النطاق orderBy في نفس الحقل

    Web modular API

    import { query, where, orderBy } from "firebase/firestore";  
    
    const q = query(citiesRef, where("population", ">", 100000), orderBy("population"));

    Web namespaced API

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

    Python

    cities_ref = db.collection("cities")
    query = cities_ref.where(filter=FieldFilter("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 .

    $query = $citiesRef
        ->where('population', '>', 2500000)
        ->orderBy('population');
    وحدة
    Query query = citiesRef
        .WhereGreaterThan("Population", 2500000)
        .OrderBy("Population");
    ج #
    Query query = citiesRef
        .WhereGreaterThan("Population", 2500000)
        .OrderBy("Population");
    روبي
    query = cities_ref.where("population", ">", 2_500_000).order("population")

    غير صالح : عامل تصفية النطاق orderBy الأول في حقول مختلفة

    Web modular API

    import { query, where, orderBy } from "firebase/firestore";  
    
    const q = query(citiesRef, where("population", ">", 100000), orderBy("country"));

    Web namespaced API

    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");
    جافا
    Query query = cities.whereGreaterThan("population", 2500000L).orderBy("country");
    بايثون
    cities_ref = db.collection("cities")
    query = cities_ref.where(filter=FieldFilter("population", ">", 2500000)).order_by(
        "country"
    )
    results = query.stream()

    Python

    cities_ref = db.collection("cities")
    query = cities_ref.where(filter=FieldFilter("population", ">", 2500000)).order_by(
        "country"
    )
    results = query.stream()
    سي ++
    // 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 .

    $invalidRangeQuery = $citiesRef
        ->where('population', '>', 2500000)
        ->orderBy('country');
    وحدة
    Query query = citiesRef
        .WhereGreaterThan("Population", 2500000)
        .OrderBy("Country");
    ج #
    Query query = citiesRef
        .WhereGreaterThan("Population", 2500000)
        .OrderBy("Country");
    روبي
    query = cities_ref.where("population", ">", 2_500_000).order("country")

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