با استفاده از 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)
هدف-C
توجه: این محصول در اهداف 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)
PHP
$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 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)
هدف-C
توجه: این محصول در اهداف 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)
PHP
$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 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)
هدف-C
توجه: این محصول در اهداف 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)
PHP
$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( 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)
هدف-C
توجه: این محصول در اهداف 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)
PHP
$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 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")
    هدف-C
    توجه: این محصول در اهداف 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)
    PHP
    $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")

    نامعتبر : فیلتر محدوده و first 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")
    هدف-C
    توجه: این محصول در اهداف 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)
    PHP
    $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")
  • شما نمی توانید پرس و جو خود را بر اساس هر فیلدی که در برابری ( = ) یا in بند قرار داده شده است، سفارش دهید.