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

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

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

به طور پیش‌فرض، یک پرس‌وجو تمام اسنادی را که مطابق با پرس‌وجو هستند، به ترتیب صعودی بر اساس شناسه سند بازیابی می‌کند. می‌توانید ترتیب مرتب‌سازی داده‌های خود را با استفاده از orderBy() مشخص کنید و می‌توانید تعداد اسناد بازیابی شده را با استفاده limit() محدود کنید. اگر limit() مشخص کنید، مقدار باید بزرگتر یا مساوی صفر باشد.

برای مثال، می‌توانید با استفاده از دستور زیر، سه شهر اول را به ترتیب حروف الفبا جستجو کنید:

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

پی اچ پی

برای اطلاعات بیشتر در مورد نصب و ایجاد یک کلاینت 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)

همچنین می‌توانید برای بدست آوردن ۳ شهر آخر ، آنها را به ترتیب نزولی مرتب کنید:

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

پی اچ پی

برای اطلاعات بیشتر در مورد نصب و ایجاد یک کلاینت 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)
هدف-سی
توجه: این محصول در 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
)
سی++
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)
پی اچ پی

پی اچ پی

برای اطلاعات بیشتر در مورد نصب و ایجاد یک کلاینت 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)
هدف-سی
توجه: این محصول در 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()
سی++
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)
پی اچ پی

پی اچ پی

برای اطلاعات بیشتر در مورد نصب و ایجاد یک کلاینت 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);