স্বতন্ত্র

বর্ণনা

একটি রাশিমালা সিরিজের মানগুলোর সকল স্বতন্ত্র সংমিশ্রণ নির্ণয় করুন।

distinct(...) ধাপটির সিনট্যাক্স select(...) এর মতোই, কারণ এটি এক বা একাধিক নির্বাচনযোগ্য এক্সপ্রেশন গ্রহণ করে। এক্সপ্রেশনটি যখন শুধু একটি ফিল্ড রেফারেন্স হয়, তখন স্ট্রিং ব্যবহার করা যেতে পারে:

উদাহরণ

নোড.জেএস
let cities = await db.pipeline()
  .collection("cities")
  .distinct("country")
  .execute();

cities = await db.pipeline()
  .collection("cities")
  .distinct(
    field("state").toLower().as("normalizedState"),
    field("country"))
  .execute();

Web

let cities = await execute(db.pipeline()
  .collection("cities")
  .distinct("country"));

cities = await execute(db.pipeline()
  .collection("cities")
  .distinct(
    field("state").toLower().as("normalizedState"),
    field("country")));
সুইফট
let results = try await db.pipeline()
  .collection("books")
  .distinct([
    Field("author").toUpper().as("author"),
    Field("genre")
  ])
  .execute()

Kotlin

var cities = db.pipeline()
    .collection("cities")
    .distinct("country")
    .execute()

cities = db.pipeline()
    .collection("cities")
    .distinct(
        field("state").toLower().alias("normalizedState"),
        field("country")
    )
    .execute()

Java

Task<Pipeline.Snapshot> cities;
cities = db.pipeline()
        .collection("cities")
        .distinct("country")
        .execute();

cities = db.pipeline()
        .collection("cities")
        .distinct(
                field("state").toLower().alias("normalizedState"),
                field("country"))
        .execute();
পাইথন
from google.cloud.firestore_v1.pipeline_expressions import Field

cities = client.pipeline().collection("cities").distinct("country").execute()

cities = (
    client.pipeline()
    .collection("cities")
    .distinct(Field.of("state").to_lower().as_("normalizedState"), "country")
    .execute()
)
জাভা
Pipeline.Snapshot cities1 =
    firestore.pipeline().collection("cities").distinct("country").execute().get();

Pipeline.Snapshot cities2 =
    firestore
        .pipeline()
        .collection("cities")
        .distinct(toLower(field("state")).as("normalizedState"), field("country"))
        .execute()
        .get();

আচরণ

distinct(...) পর্যায়টি গ্রুপ ছাড়া aggregate(...) পর্যায়ের মতোই কাজ করে। aggregate(...) এবং select(...) ও দেখুন।

স্বতন্ত্র ক্ষেত্রের মান খুঁজুন

উদাহরণস্বরূপ, নিম্নলিখিত cities সংগ্রহে থাকা প্রতিটি দেশের একটি তালিকা পেতে:

নোড.জেএস

await db.collection("cities").doc("SF").set({name: "San Francisco", state: "CA", country: "USA"});
await db.collection("cities").doc("LA").set({name: "Los Angeles", state: "CA", country: "USA"});
await db.collection("cities").doc("NY").set({name: "New York", state: "NY", country: "USA"});
await db.collection("cities").doc("TOR").set({name: "Toronto", state: null, country: "Canada"});
await db.collection("cities").doc("MEX").set({name: "Mexico City", state: null, country: "Mexico"});

নিম্নলিখিত পদ্ধতি ব্যবহার করে স্বতন্ত্র দেশগুলি খুঁজে পাওয়া যায়:

নোড.জেএস

const cities = await db.pipeline()
  .collection("/cities")
  .distinct("country")
  .execute();

যা নিম্নলিখিত ফলাফল তৈরি করে:

{ country: "USA" }
{ country: "Canada" }
{ country: "Mexico" }

এক্সপ্রেশনের স্বতন্ত্র আউটপুট

আপনি একাধিক ক্ষেত্রের স্বতন্ত্র সংমিশ্রণ, বা আরও জটিল অভিব্যক্তিও খুঁজে পেতে পারেন। উদাহরণস্বরূপ:

নোড.জেএস

const cities = await db.pipeline()
  .collection("/cities")
  .distinct(
    field("state").toLower().as("normalized_state"),
    field("country"))
  .execute();

পেতে:

{ country: "USA", normalized_state: "ca" }
{ country: "USA", normalized_state: "ny" }
{ country: "Canada", normalized_state: null }
{ country: "Mexico", normalized_state: null }

সমতুল্য আচরণ

ভিন্ন ভিন্ন মানের ক্ষেত্রে সমতুল্যতার আচরণ সমতার মতোই একই শব্দার্থ অনুসরণ করে।

এর অর্থ হলো, সমতুল্য মান, যেমন গাণিতিকভাবে সমতুল্য সাংখ্যিক মান, তাদের মূল প্রকার (৩২-বিট পূর্ণসংখ্যা, ৬৪-বিট পূর্ণসংখ্যা, ফ্লোটিং পয়েন্ট সংখ্যা, দশমিক সংখ্যা, ইত্যাদি) নির্বিশেষে, একই স্বতন্ত্র মান হিসাবে বিবেচিত হয়।

উদাহরণস্বরূপ, numerics নামক একটি কালেকশনে, যেখানে বিভিন্ন ডকুমেন্টে যথাক্রমে ৩২-বিট পূর্ণসংখ্যা 1 , ৬৪-বিট পূর্ণসংখ্যা 1L এবং ফ্লোটিং পয়েন্ট 1.0 এর মতো foo ভ্যালু রয়েছে, distinct(...) শুধুমাত্র ১টি ফলাফল রিটার্ন করবে।

ডেটা সেটে বিভিন্ন সমতুল্য মান উপস্থিত থাকার ক্ষেত্রে, গ্রুপটির আউটপুট মান এই সমতুল্য মানগুলোর যেকোনো একটি হতে পারে। এই উদাহরণে, foo এর এই মানটি 1 , 1L , বা 1.0 হিসাবে ফেরত দেওয়া হতে পারে।

যদিও এটিকে সুনিশ্চিত বলে মনে হয়, তবুও একটি নির্দিষ্ট মান নির্বাচিত হবে—এই আচরণের ওপর নির্ভর করার চেষ্টা করা উচিত নয়

মেমরি ব্যবহার

distinct(...) পর্যায়টি কীভাবে সম্পাদিত হবে তা উপলব্ধ ইনডেক্সগুলোর উপর নির্ভর করে। যখন কোয়েরি অপটিমাইজার দ্বারা কোনো উপযুক্ত ইনডেক্স নির্বাচিত হয় না, তখন distinct(...) সমস্ত স্বতন্ত্র মানগুলোকে মেমরিতে বাফার করার প্রয়োজন হয়।

অত্যন্ত বিপুল সংখ্যক স্বতন্ত্র মান থাকলে, অথবা মানগুলো খুব বড় হলে (যেমন, বিশাল আকারের স্বতন্ত্র মান), এই পর্যায়ে মেমোরি শেষ হয়ে যেতে পারে।

এই ধরনের ক্ষেত্রে, distinct(...) চালানোর জন্য ডেটাসেট সীমিত করতে আপনার ফিল্টার প্রয়োগ করা উচিত, অথবা বেশি মেমরি ব্যবহার এড়াতে সুপারিশ অনুযায়ী ইনডেক্স তৈরি করা উচিত।

কোয়েরি এক্সপ্লেইন প্রকৃত কোয়েরি এক্সিকিউশন প্ল্যান এবং প্রোফাইলিং ডেটা সম্পর্কে তথ্য প্রদান করবে, যা ডিবাগিং-এ সাহায্য করবে।