Catch up on highlights from Firebase at Google I/O 2023. Learn more

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

ক্লাউড ফায়ারস্টোর আপনি একটি সংগ্রহ থেকে কোন নথিগুলি পুনরুদ্ধার করতে চান তা নির্দিষ্ট করার জন্য শক্তিশালী ক্যোয়ারী কার্যকারিতা প্রদান করে৷ এই প্রশ্নগুলি get() বা addSnapshotListener() এর সাথেও ব্যবহার করা যেতে পারে, যেমন Get Data- তে বর্ণিত হয়েছে।

অর্ডার এবং ডেটা সীমাবদ্ধ করুন

ডিফল্টরূপে, একটি ক্যোয়ারী সমস্ত নথি পুনরুদ্ধার করে যা ডকুমেন্ট আইডি দ্বারা ক্রমবর্ধমান ক্রমে ক্যোয়ারীকে সন্তুষ্ট করে। আপনি orderBy() ব্যবহার করে আপনার ডেটার জন্য সাজানোর ক্রম নির্দিষ্ট করতে পারেন এবং আপনি limit() ব্যবহার করে পুনরুদ্ধার করা নথির সংখ্যা সীমিত করতে পারেন। যদি আপনি একটি limit() নির্দিষ্ট করেন, তাহলে মানটি অবশ্যই শূন্যের চেয়ে বেশি বা সমান হতে হবে।

উদাহরণস্বরূপ, আপনি বর্ণানুক্রমিকভাবে প্রথম 3টি শহরের জন্য প্রশ্ন করতে পারেন:

Web version 9

import { query, orderBy, limit } from "firebase/firestore";  

const q = query(citiesRef, orderBy("name"), limit(3));

Web version 8

citiesRef.orderBy("name").limit(3);
সুইফট
দ্রষ্টব্য: এই পণ্যটি watchOS এবং অ্যাপ ক্লিপ লক্ষ্যে উপলব্ধ নয়।
citiesRef.order(by: "name").limit(to: 3)
উদ্দেশ্য গ
দ্রষ্টব্য: এই পণ্যটি watchOS এবং অ্যাপ ক্লিপ লক্ষ্যে উপলব্ধ নয়।
[[citiesRef queryOrderedByField:@"name"] queryLimitedTo:3];

Kotlin+KTX

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);
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)
পিএইচপি

পিএইচপি

একটি ক্লাউড ফায়ারস্টোর ক্লায়েন্ট ইনস্টল এবং তৈরি করার বিষয়ে আরও জানতে, ক্লাউড ফায়ারস্টোর ক্লায়েন্ট লাইব্রেরি দেখুন।

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

আপনি শেষ 3টি শহর পেতে নিচের ক্রম অনুসারে সাজাতে পারেন:

Web version 9

import { query, orderBy, limit } from "firebase/firestore";  

const q = query(citiesRef, orderBy("name", "desc"), limit(3));

Web version 8

citiesRef.orderBy("name", "desc").limit(3);
সুইফট
দ্রষ্টব্য: এই পণ্যটি watchOS এবং অ্যাপ ক্লিপ লক্ষ্যে উপলব্ধ নয়।
citiesRef.order(by: "name", descending: true).limit(to: 3)
উদ্দেশ্য গ
দ্রষ্টব্য: এই পণ্যটি watchOS এবং অ্যাপ ক্লিপ লক্ষ্যে উপলব্ধ নয়।
[[citiesRef queryOrderedByField:@"name" descending:YES] queryLimitedTo:3];

Kotlin+KTX

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);
Node.js
const lastThreeRes = await citiesRef.orderBy('name', 'desc').limit(3).get();
যাওয়া
query := cities.OrderBy("name", firestore.Desc).Limit(3)
পিএইচপি

পিএইচপি

একটি ক্লাউড ফায়ারস্টোর ক্লায়েন্ট ইনস্টল এবং তৈরি করার বিষয়ে আরও জানতে, ক্লাউড ফায়ারস্টোর ক্লায়েন্ট লাইব্রেরি দেখুন।

$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 version 9

import { query, orderBy } from "firebase/firestore";  

const q = query(citiesRef, orderBy("state"), orderBy("population", "desc"));

Web version 8

citiesRef.orderBy("state").orderBy("population", "desc");
সুইফট
দ্রষ্টব্য: এই পণ্যটি watchOS এবং অ্যাপ ক্লিপ লক্ষ্যে উপলব্ধ নয়।
citiesRef
    .order(by: "state")
    .order(by: "population", descending: true)
উদ্দেশ্য গ
দ্রষ্টব্য: এই পণ্যটি watchOS এবং অ্যাপ ক্লিপ লক্ষ্যে উপলব্ধ নয়।
[[citiesRef queryOrderedByField:@"state"] queryOrderedByField:@"population" descending:YES];

Kotlin+KTX

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')
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);
Node.js
const byStateByPopRes = await citiesRef.orderBy('state').orderBy('population', 'desc').get();
যাওয়া
query := client.Collection("cities").OrderBy("state", firestore.Asc).OrderBy("population", firestore.Desc)
পিএইচপি

পিএইচপি

একটি ক্লাউড ফায়ারস্টোর ক্লায়েন্ট ইনস্টল এবং তৈরি করার বিষয়ে আরও জানতে, ক্লাউড ফায়ারস্টোর ক্লায়েন্ট লাইব্রেরি দেখুন।

$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")

আপনি orderBy() এবং limit() এর সাথে where() ফিল্টারগুলিকে একত্রিত করতে পারেন। নিম্নলিখিত উদাহরণে, কোয়েরিগুলি একটি জনসংখ্যার থ্রেশহোল্ডকে সংজ্ঞায়িত করে, জনসংখ্যা অনুসারে ক্রমবর্ধমান ক্রমে সাজান এবং শুধুমাত্র প্রথম কয়েকটি ফলাফল প্রদান করে যা থ্রেশহোল্ড অতিক্রম করে:

Web version 9

import { query, where, orderBy, limit } from "firebase/firestore";  

const q = query(citiesRef, where("population", ">", 100000), orderBy("population"), limit(2));

Web version 8

citiesRef.where("population", ">", 100000).orderBy("population").limit(2);
সুইফট
দ্রষ্টব্য: এই পণ্যটি watchOS এবং অ্যাপ ক্লিপ লক্ষ্যে উপলব্ধ নয়।
citiesRef
    .whereField("population", isGreaterThan: 100000)
    .order(by: "population")
    .limit(to: 2)
উদ্দেশ্য গ
দ্রষ্টব্য: এই পণ্যটি watchOS এবং অ্যাপ ক্লিপ লক্ষ্যে উপলব্ধ নয়।
[[[citiesRef queryWhereField:@"population" isGreaterThan:@100000]
    queryOrderedByField:@"population"]
    queryLimitedTo:2];

Kotlin+KTX

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(
    'population', '>', 2500000).order_by('population').limit(2)
results = query.stream()

Python

cities_ref = db.collection("cities")
query = cities_ref.where("population", ">", 2500000).order_by("population").limit(2)
results = query.stream()
সি++
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)
পিএইচপি

পিএইচপি

একটি ক্লাউড ফায়ারস্টোর ক্লায়েন্ট ইনস্টল এবং তৈরি করার বিষয়ে আরও জানতে, ক্লাউড ফায়ারস্টোর ক্লায়েন্ট লাইব্রেরি দেখুন।

$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() ধারা প্রদত্ত ক্ষেত্রগুলির অস্তিত্বের জন্য ফিল্টার করে । ফলাফল সেটে এমন নথি অন্তর্ভুক্ত করা হবে না যেগুলিতে প্রদত্ত ক্ষেত্রগুলি নেই৷
  • যদি আপনি একটি পরিসীমা তুলনা সহ একটি ফিল্টার অন্তর্ভুক্ত করেন ( < , <= , > , >= ), আপনার প্রথম অর্ডার একই ক্ষেত্রে হতে হবে:

    বৈধ : একই ক্ষেত্রে পরিসীমা ফিল্টার এবং orderBy

    Web version 9

    import { query, where, orderBy } from "firebase/firestore";  
    
    const q = query(citiesRef, where("population", ">", 100000), orderBy("population"));

    Web version 8

    citiesRef.where("population", ">", 100000).orderBy("population");
    সুইফট
    দ্রষ্টব্য: এই পণ্যটি watchOS এবং অ্যাপ ক্লিপ লক্ষ্যে উপলব্ধ নয়।
    citiesRef
        .whereField("population", isGreaterThan: 100000)
        .order(by: "population")
    উদ্দেশ্য গ
    দ্রষ্টব্য: এই পণ্যটি watchOS এবং অ্যাপ ক্লিপ লক্ষ্যে উপলব্ধ নয়।
    [[citiesRef queryWhereField:@"population" isGreaterThan:@100000]
        queryOrderedByField:@"population"];

    Kotlin+KTX

    citiesRef.whereGreaterThan("population", 100000).orderBy("population")

    Java

    citiesRef.whereGreaterThan("population", 100000).orderBy("population");

    Dart

    final citiesRef = db.collection("cities");
    citiesRef.where("population", isGreaterThan: 100000).orderBy("population");
    জাভা
    Query query = cities.whereGreaterThan("population", 2500000L).orderBy("population");
    পাইথন
    cities_ref = db.collection('cities')
    query = cities_ref.where(
        'population', '>', 2500000).order_by('population')
    results = query.stream()

    Python

    cities_ref = db.collection("cities")
    query = cities_ref.where("population", ">", 2500000).order_by("population")
    results = query.stream()
    Node.js
    citiesRef.where('population', '>', 2500000).orderBy('population');
    যাওয়া
    query := cities.Where("population", ">", 2500000).OrderBy("population", firestore.Asc)
    পিএইচপি

    পিএইচপি

    একটি ক্লাউড ফায়ারস্টোর ক্লায়েন্ট ইনস্টল এবং তৈরি করার বিষয়ে আরও জানতে, ক্লাউড ফায়ারস্টোর ক্লায়েন্ট লাইব্রেরি দেখুন।

    $query = $citiesRef
        ->where('population', '>', 2500000)
        ->orderBy('population');
    ঐক্য
    Query query = citiesRef
        .WhereGreaterThan("Population", 2500000)
        .OrderBy("Population");
    সি#
    Query query = citiesRef
        .WhereGreaterThan("Population", 2500000)
        .OrderBy("Population");
    রুবি
    query = cities_ref.where("population", ">", 2_500_000).order("population")

    অবৈধ : বিভিন্ন ক্ষেত্রে পরিসর ফিল্টার এবং প্রথম orderBy

    Web version 9

    import { query, where, orderBy } from "firebase/firestore";  
    
    const q = query(citiesRef, where("population", ">", 100000), orderBy("country"));

    Web version 8

    citiesRef.where("population", ">", 100000).orderBy("country");
    সুইফট
    দ্রষ্টব্য: এই পণ্যটি watchOS এবং অ্যাপ ক্লিপ লক্ষ্যে উপলব্ধ নয়।
    citiesRef
        .whereField("population", isGreaterThan: 100000)
        .order(by: "country")
    উদ্দেশ্য গ
    দ্রষ্টব্য: এই পণ্যটি watchOS এবং অ্যাপ ক্লিপ লক্ষ্যে উপলব্ধ নয়।
    [[citiesRef queryWhereField:@"population" isGreaterThan:@100000] queryOrderedByField:@"country"];

    Kotlin+KTX

    citiesRef.whereGreaterThan("population", 100000).orderBy("country")

    Java

    citiesRef.whereGreaterThan("population", 100000).orderBy("country");

    Dart

    final citiesRef = db.collection("cities");
    citiesRef.where("population", isGreaterThan: 100000).orderBy("country");
    জাভা
    Query query = cities.whereGreaterThan("population", 2500000L).orderBy("country");
    পাইথন
    cities_ref = db.collection('cities')
    query = cities_ref.where('population', '>', 2500000).order_by('country')
    results = query.stream()

    Python

    cities_ref = db.collection("cities")
    query = cities_ref.where("population", ">", 2500000).order_by("country")
    results = query.stream()
    সি++
    // BAD EXAMPLE -- will crash the program:
    cities_ref.WhereGreaterThan("population", FieldValue::Integer(100000))
        .OrderBy("country");
    Node.js
    citiesRef.where('population', '>', 2500000).orderBy('country');
    যাওয়া
    // Note: This is an invalid query. It violates the constraint that range
    // and order by are required to be on the same field.
    query := cities.Where("population", ">", 2500000).OrderBy("country", firestore.Asc)
    পিএইচপি

    পিএইচপি

    একটি ক্লাউড ফায়ারস্টোর ক্লায়েন্ট ইনস্টল এবং তৈরি করার বিষয়ে আরও জানতে, ক্লাউড ফায়ারস্টোর ক্লায়েন্ট লাইব্রেরি দেখুন।

    $invalidRangeQuery = $citiesRef
        ->where('population', '>', 2500000)
        ->orderBy('country');
    ঐক্য
    Query query = citiesRef
        .WhereGreaterThan("Population", 2500000)
        .OrderBy("Country");
    সি#
    Query query = citiesRef
        .WhereGreaterThan("Population", 2500000)
        .OrderBy("Country");
    রুবি
    query = cities_ref.where("population", ">", 2_500_000).order("country")
  • আপনি একটি সমতা ( = ) বা in অন্তর্ভুক্ত কোনো ক্ষেত্র দ্বারা আপনার ক্যোয়ারী অর্ডার করতে পারবেন না।

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