مرتب‌سازی و محدود کردن داده‌ها با Cloud Firestore

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

داده‌های سفارش و محدودیت

به‌طور پیش‌فرض، پُرسمان همه اسنادی را که با پُرسمان مطابقت دارند به‌ترتیب صعودی براساس شناسه سند بازیابی می‌کند. می‌توانید ترتیب مرتب‌سازی داده‌هایتان را بااستفاده از 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);
Swift
توجه: این محصول در watchOS و App Clip دردسترس نیست.
citiesRef.order(by: "name").limit(to: 3)
Objective-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);
Unity
Query query = citiesRef.OrderBy("Name").Limit(3);
سی شارپ
Query query = citiesRef.OrderBy("Name").Limit(3);
Ruby
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);
Swift
توجه: این محصول در watchOS و App Clip دردسترس نیست.
citiesRef.order(by: "name", descending: true).limit(to: 3)
Objective-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);
Unity
Query query = citiesRef.OrderByDescending("Name").Limit(3);
سی شارپ
Query query = citiesRef.OrderByDescending("Name").Limit(3);
Ruby
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");
Swift
توجه: این محصول در watchOS و App Clip دردسترس نیست.
citiesRef
  .order(by: "state")
  .order(by: "population", descending: true)
Objective-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');
Unity
Query query = citiesRef.OrderBy("State").OrderByDescending("Population");
سی شارپ
Query query = citiesRef.OrderBy("State").OrderByDescending("Population");
Ruby
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);
Swift
توجه: این محصول در watchOS و App Clip دردسترس نیست.
citiesRef
  .whereField("population", isGreaterThan: 100000)
  .order(by: "population")
  .limit(to: 2)
Objective-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);
Unity
Query query = citiesRef
    .WhereGreaterThan("Population", 2500000)
    .OrderBy("Population")
    .Limit(2);
سی شارپ
Query query = citiesRef
    .WhereGreaterThan("Population", 2500000)
    .OrderBy("Population")
    .Limit(2);
Ruby
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));

پُرسمان بالا شامل یک order-by ضمنی روی نابرابری است و معادل با موارد زیر است:

جاوا
db.collection(“cities”).where(or(“country”, USA”), greaterThan(“population”, 250000)).orderBy(“population”);