با Cloud Firestore داده ها را سفارش دهید و محدود کنید

Cloud Firestore عملکرد قدرتمند پرس و جو را برای تعیین اسنادی که می خواهید از یک مجموعه بازیابی کنید فراهم می کند. این کوئری ها همچنین می توانند با get() یا addSnapshotListener() استفاده شوند، همانطور که در Get Data توضیح داده شده است.

سفارش و محدود کردن داده ها

به طور پیش فرض، یک پرس و جو تمام اسنادی را که پرس و جو را برآورده می کنند به ترتیب صعودی با شناسه سند بازیابی می کند. می توانید ترتیب مرتب سازی داده های خود را با استفاده از 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);
سویفت
توجه: این محصول در اهداف watchOS و App Clip موجود نیست.
citiesRef.order(by: "name").limit(to: 3)
هدف-C
توجه: این محصول در اهداف watchOS و App Clip موجود نیست.
[[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);
پایتون
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);
وحدت
Query query = citiesRef.OrderBy("Name").Limit(3);
سی شارپ
Query query = citiesRef.OrderBy("Name").Limit(3);
یاقوت سرخ
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);
سویفت
توجه: این محصول در اهداف watchOS و App Clip موجود نیست.
citiesRef.order(by: "name", descending: true).limit(to: 3)
هدف-C
توجه: این محصول در اهداف watchOS و App Clip موجود نیست.
[[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);
پایتون
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);
وحدت
Query query = citiesRef.OrderByDescending("Name").Limit(3);
سی شارپ
Query query = citiesRef.OrderByDescending("Name").Limit(3);
یاقوت سرخ
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");
سویفت
توجه: این محصول در اهداف watchOS و App Clip موجود نیست.
citiesRef
  .order(by: "state")
  .order(by: "population", descending: true)
هدف-C
توجه: این محصول در اهداف watchOS و App Clip موجود نیست.
[[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);
پایتون
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');
وحدت
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

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);
سویفت
توجه: این محصول در اهداف 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];

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);
پایتون
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);
وحدت
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);