Cloud Firestore আপনি একটি সংগ্রহ থেকে কোন নথিগুলি পুনরুদ্ধার করতে চান তা নির্দিষ্ট করার জন্য শক্তিশালী ক্যোয়ারী কার্যকারিতা প্রদান করে৷ এই প্রশ্নগুলি get()
বা addSnapshotListener()
এর সাথেও ব্যবহার করা যেতে পারে, যেমন Get Data- তে বর্ণিত হয়েছে।
অর্ডার এবং ডেটা সীমাবদ্ধ করুন
ডিফল্টরূপে, একটি ক্যোয়ারী সমস্ত নথি পুনরুদ্ধার করে যা ডকুমেন্ট আইডি দ্বারা ক্রমবর্ধমান ক্রমে ক্যোয়ারীকে সন্তুষ্ট করে। আপনি orderBy()
ব্যবহার করে আপনার ডেটার জন্য সাজানোর ক্রম নির্দিষ্ট করতে পারেন এবং আপনি limit()
ব্যবহার করে পুনরুদ্ধার করা নথির সংখ্যা সীমিত করতে পারেন। যদি আপনি একটি limit()
নির্দিষ্ট করেন, তাহলে মানটি অবশ্যই শূন্যের চেয়ে বেশি বা সমান হতে হবে।
উদাহরণস্বরূপ, আপনি বর্ণানুক্রমিকভাবে প্রথম 3টি শহরের জন্য প্রশ্ন করতে পারেন:
import { query, orderBy, limit } from "firebase/firestore"; const q = query(citiesRef, orderBy("name"), limit(3));
citiesRef.orderBy("name").limit(3);
citiesRef.order(by: "name").limit(to: 3)
[[citiesRef queryOrderedByField:@"name"] queryLimitedTo:3];
citiesRef.orderBy("name").limit(3)
citiesRef.orderBy("name").limit(3);
final citiesRef = db.collection("cities"); citiesRef.orderBy("name").limit(3);
cities_ref.OrderBy("name").Limit(3);
পিএইচপি
একটি Cloud Firestore ক্লায়েন্ট ইনস্টল এবং তৈরি করার বিষয়ে আরও জানতে, Cloud Firestore ক্লায়েন্ট লাইব্রেরি দেখুন।
Query query = citiesRef.OrderBy("Name").Limit(3);
আপনি শেষ 3টি শহর পেতে নিচের ক্রম অনুসারে সাজাতে পারেন:
import { query, orderBy, limit } from "firebase/firestore"; const q = query(citiesRef, orderBy("name", "desc"), limit(3));
citiesRef.orderBy("name", "desc").limit(3);
citiesRef.order(by: "name", descending: true).limit(to: 3)
[[citiesRef queryOrderedByField:@"name" descending:YES] queryLimitedTo:3];
citiesRef.orderBy("name", Query.Direction.DESCENDING).limit(3)
citiesRef.orderBy("name", Direction.DESCENDING).limit(3);
final citiesRef = db.collection("cities"); citiesRef.orderBy("name", descending: true).limit(3);
cities_ref.OrderBy("name", Query::Direction::kDescending).Limit(3);
পিএইচপি
একটি Cloud Firestore ক্লায়েন্ট ইনস্টল এবং তৈরি করার বিষয়ে আরও জানতে, Cloud Firestore ক্লায়েন্ট লাইব্রেরি দেখুন।
Query query = citiesRef.OrderByDescending("Name").Limit(3);
আপনি একাধিক ক্ষেত্র দ্বারা অর্ডার করতে পারেন। উদাহরণস্বরূপ, আপনি যদি রাজ্য অনুসারে অর্ডার করতে চান, এবং প্রতিটি রাজ্যের মধ্যে জনসংখ্যার ক্রম অনুসারে:
import { query, orderBy } from "firebase/firestore"; const q = query(citiesRef, orderBy("state"), orderBy("population", "desc"));
citiesRef.orderBy("state").orderBy("population", "desc");
citiesRef .order(by: "state") .order(by: "population", descending: true)
[[citiesRef queryOrderedByField:@"state"] queryOrderedByField:@"population" descending:YES];
citiesRef.orderBy("state").orderBy("population", Query.Direction.DESCENDING)
citiesRef.orderBy("state").orderBy("population", Direction.DESCENDING);
final citiesRef = db.collection("cities"); citiesRef.orderBy("state").orderBy("population", descending: true);
cities_ref.OrderBy("state").OrderBy("name", Query::Direction::kDescending);
পিএইচপি
একটি Cloud Firestore ক্লায়েন্ট ইনস্টল এবং তৈরি করার বিষয়ে আরও জানতে, Cloud Firestore ক্লায়েন্ট লাইব্রেরি দেখুন।
Query query = citiesRef.OrderBy("State").OrderByDescending("Population");
আপনি orderBy()
এবং limit()
এর সাথে where()
ফিল্টারগুলিকে একত্রিত করতে পারেন। নিম্নলিখিত উদাহরণে, কোয়েরিগুলি একটি জনসংখ্যার থ্রেশহোল্ডকে সংজ্ঞায়িত করে, জনসংখ্যা অনুসারে ক্রমবর্ধমান ক্রমে সাজান এবং শুধুমাত্র প্রথম কয়েকটি ফলাফল প্রদান করে যা থ্রেশহোল্ড অতিক্রম করে:
import { query, where, orderBy, limit } from "firebase/firestore"; const q = query(citiesRef, where("population", ">", 100000), orderBy("population"), limit(2));
citiesRef.where("population", ">", 100000).orderBy("population").limit(2);
citiesRef .whereField("population", isGreaterThan: 100000) .order(by: "population") .limit(to: 2)
[[[citiesRef queryWhereField:@"population" isGreaterThan:@100000] queryOrderedByField:@"population"] queryLimitedTo:2];
citiesRef.whereGreaterThan("population", 100000).orderBy("population").limit(2)
citiesRef.whereGreaterThan("population", 100000).orderBy("population").limit(2);
final citiesRef = db.collection("cities"); citiesRef .where("population", isGreaterThan: 100000) .orderBy("population") .limit(2);
cities_ref.WhereGreaterThan("population", FieldValue::Integer(100000)) .OrderBy("population") .Limit(2);
পিএইচপি
একটি Cloud Firestore ক্লায়েন্ট ইনস্টল এবং তৈরি করার বিষয়ে আরও জানতে, Cloud Firestore ক্লায়েন্ট লাইব্রেরি দেখুন।
Query query = citiesRef .WhereGreaterThan("Population", 2500000) .OrderBy("Population") .Limit(2);
যাইহোক, যদি আপনার একটি পরিসীমা তুলনা সহ একটি ফিল্টার থাকে ( <
, <=
, >
, >=
), আপনার প্রথম অর্ডার একই ক্ষেত্রে হতে হবে, নীচে orderBy()
সীমাবদ্ধতার তালিকা দেখুন।
সীমাবদ্ধতা
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”);