সাজান

বর্ণনা

এক বা একাধিক নির্দিষ্ট সাজানোর ক্রম অনুসারে ইনপুট ডকুমেন্টগুলো সাজায়।

উদাহরণ

Web

const results = await execute(db.pipeline()
  .collection("books")
  .sort(
    field("release_date").descending(), field("author").ascending()
  )
);
সুইফট
let results = try await db.pipeline()
  .collection("books")
  .sort([
    Field("release_date").descending(), Field("author").ascending()
  ])
  .execute()

Kotlin

val results = db.pipeline()
    .collection("books")
    .sort(
        field("release_date").descending(),
        field("author").ascending()
    )
    .execute()

Java

Task<Pipeline.Snapshot> results = db.pipeline()
    .collection("books")
    .sort(
        field("release_date").descending(),
        field("author").ascending()
    )
    .execute();
পাইথন
from google.cloud.firestore_v1.pipeline_expressions import Field

results = (
    client.pipeline()
    .collection("books")
    .sort(Field.of("release_date").descending(), Field.of("author").ascending())
    .execute()
)
জাভা
Pipeline.Snapshot results =
    firestore
        .pipeline()
        .collection("books")
        .sort(descending(field("release_date")), ascending(field("author")))
        .execute()
        .get();
যান
snapshot := client.Pipeline().
	Collection("books").
	Sort(firestore.Orders(
		firestore.Descending(firestore.FieldOf("release_date")),
		firestore.Ascending(firestore.FieldOf("author")),
	)).
	Execute(ctx)

আচরণ

সাজানোর ক্রম

সাজানোর ক্রম Cloud Firestore ভ্যালু টাইপের ক্রম অনুসরণ করে।

ফলাফলের নির্ণায়ক ক্রম

কোয়েরিতে যদি কোনো sort পর্যায় না থাকে, তাহলে ফেরত আসা ফলাফলগুলোর ক্রম অনির্দিষ্ট হয় এবং বিভিন্ন এক্সিকিউশনের মধ্যে তা ভিন্ন হতে পারে। যদি sort পর্যায় উপস্থিত থাকে কিন্তু অর্ডারিং এক্সপ্রেশনগুলো ফেরত আসা ফলাফলগুলোর মধ্যে একটি অনন্য ক্রম তৈরি করতে ব্যর্থ হয়, তাহলেও বিভিন্ন এক্সিকিউশনের মধ্যে ফেরত আসা ফলাফলগুলোর ক্রম ভিন্ন হতে পারে।

উদাহরণস্বরূপ, নিম্নলিখিত ডেটাসেটের সাপেক্ষে শহরগুলোকে তাদের country অনুযায়ী আরোহী ক্রমে সাজানো:

{ name: "Los Angeles", state: "CA", country: "USA", population: 3970000 },
{ name: "New York", state: "NY", country: "USA", population: 8530000 }
{ name: "San Francisco", state: "CA", country: "USA", population: 870000 },

ডেটাসেটের ৩টি ডকুমেন্টের যেকোনো বিন্যাস তৈরি করা যেতে পারে, কারণ সেগুলোর সবকটিতেই একই country অ্যাট্রিবিউট রয়েছে। ফলাফলগুলোর একটি সুনির্দিষ্ট ক্রম তৈরি করতে, আপনি অর্ডারের সাথে name উপর ভিত্তি করে একটি সর্ট অর্ডার যুক্ত করতে পারেন:

নোড.জেএস

const results = await db.pipeline()
  .collection("/cities")
  .sort(field("country").ascending(), fieldd("__name__").ascending())
  .execute();

একাধিক ডকুমেন্টের country মান একই হলে, এটি মীমাংসাকারী হিসেবে অনন্য ডকুমেন্টের নামটি ব্যবহার করবে। উল্লেখ্য যে, সংগ্রহের মধ্যে থাকা ডকুমেন্টটির অনন্য কী গঠনকারী অন্য যেকোনো ফিল্ড, যা country ফিল্ডের সাথে একত্রে কাজ করে, তা ফলাফলের একটি সুনির্দিষ্ট ক্রম তৈরি করতে ব্যবহার করা যেতে পারে।

সমতুল্য মান বাছাই করা

সমতুল্য মানগুলো একসাথে সাজানো হয়, কিন্তু ‘ফলাফলের সুনির্দিষ্ট ক্রম’ আলোচনা অনুসারে সমতুল্য শ্রেণীর মধ্যে ফলাফলের ক্রম সুনির্দিষ্ট নয়। উদাহরণস্বরূপ, নিম্নলিখিত ডেটাসেটের সাপেক্ষে শহরগুলোকে size অনুযায়ী আরোহী ক্রমে সাজানো:

{ name: "Los Angeles", state: "CA", country: "USA", size: 3970000 },
{ name: "Mexico City", state: null, country: "Mexico", size: 3970000.0 },

ডেটাসেটের দুটি ডকুমেন্টের যেকোনো বিন্যাস তৈরি করা যেতে পারে, কারণ উভয় ডকুমেন্টের size 3970000

একাধিক বাছাই পর্যায়

যখন কোয়েরিতে একাধিক ধারাবাহিক সর্টিং পর্যায় থাকে, তখন শুধুমাত্র শেষ সর্টিং পর্যায়টিই কোয়েরির ফলাফলের উপর প্রভাব ফেলে। উল্লেখ্য যে, এটি কোর এপিআই (Core API)-এর orderBy ক্লজের আচরণ থেকে ভিন্ন।

টপ-এন সর্ট অপ্টিমাইজেশন

sort পর যখন limit(...) ব্যবহার করা হয়, তখন একটি টপ-এন সর্ট ব্যবহার করা যেতে পারে। এই অপটিমাইজেশনটি সর্ট পর্যায়ের মেমরি ব্যবহারকে সীমিত করে, কারণ এটি limit(...) দ্বারা সংজ্ঞায়িত অনুযায়ী একবারে শুধুমাত্র N সংখ্যক ডকুমেন্ট সংরক্ষণ করতে পারে—যা সর্ট প্রক্রিয়াটিকে আরও মেমরি-সাশ্রয়ী করে তোলে।

নাল এবং অনুপস্থিত মান

যদি কোনো অর্ডারিং-এ নির্দিষ্ট করা কোনো ফিল্ড একটি ডকুমেন্টে বিদ্যমান না থাকে, তাহলে তার মানটিকে null হিসেবে সর্ট করা হয়। উদাহরণস্বরূপ, নিম্নলিখিত ডেটাসেটের সাপেক্ষে শহরগুলোকে তাদের state অনুসারে আরোহী ক্রমে সাজানো:

{ name: "Los Angeles", state: "CA", country: "USA", population: 3970000 },
{ name: "Mexico City", state: null, country: "Mexico", population: 9200000 },
{ name: "New York", state: "NY", country: "USA", population: 8530000 }
{ name: "San Francisco", state: "CA", country: "USA", population: 870000 },
{ name: "Toronto", country: "Canada", population: 2930000 },

এর ফলে নিম্নলিখিত ফলাফল পাওয়া যায়, যেখানে 'টরন্টো' ডকুমেন্ট এবং 'মেক্সিকো সিটি' ডকুমেন্টকে null হিসেবে এবং অন্যান্য ডকুমেন্টের আগে সাজানো হয়।

{ name: "Toronto", country: "Canada", population: 2930000 },
{ name: "Mexico City", state: null, country: "Mexico", population: 9200000 },
{ name: "Los Angeles", state: "CA", country: "USA", population: 3970000 },
{ name: "San Francisco", state: "CA", country: "USA", population: 870000 },
{ name: "New York", state: "NY", country: "USA", population: 8530000 }