ক্লাউড ফায়ারস্টোরের সাথে ডেটা অর্ডার এবং সীমাবদ্ধ করুন

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