ডেটার তালিকা নিয়ে কাজ করুন

একটি ডাটাবেস রেফারেন্স পান

ডাটাবেস থেকে ডেটা পড়তে বা লিখতে, আপনার DatabaseReference একটি উদাহরণ প্রয়োজন:

DatabaseReference ref = FirebaseDatabase.instance.ref();

পড়া এবং তালিকা লেখা

ডেটার তালিকায় যুক্ত করুন

মাল্টি-ইউজার অ্যাপ্লিকেশনের তালিকায় ডেটা যুক্ত করতে push() পদ্ধতি ব্যবহার করুন। push() পদ্ধতিটি নির্দিষ্ট ফায়ারবেস রেফারেন্সে একটি নতুন শিশু যোগ করার সময় একটি অনন্য কী তৈরি করে। তালিকার প্রতিটি নতুন উপাদানের জন্য এই স্বয়ংক্রিয়-উত্পাদিত কীগুলি ব্যবহার করে, অনেক ক্লায়েন্ট একই সময়ে শিশুদের লেখার দ্বন্দ্ব ছাড়াই একই স্থানে যুক্ত করতে পারে। push() দ্বারা উত্পন্ন অনন্য কী একটি টাইমস্ট্যাম্পের উপর ভিত্তি করে, তাই তালিকা আইটেমগুলি স্বয়ংক্রিয়ভাবে কালানুক্রমিকভাবে অর্ডার করা হয়।

আপনি সন্তানের স্বয়ংক্রিয়-উত্পাদিত কী বা সন্তানের জন্য সেট ডেটার মান পেতে push() পদ্ধতি দ্বারা প্রত্যাবর্তিত নতুন ডেটার রেফারেন্স ব্যবহার করতে পারেন। একটি push() রেফারেন্সের .key বৈশিষ্ট্য স্বয়ংক্রিয়ভাবে তৈরি কী ধারণ করে।

আপনি আপনার ডেটা স্ট্রাকচারকে সমতল করার জন্য এই স্বয়ংক্রিয়-উত্পন্ন কীগুলি ব্যবহার করতে পারেন। আরও তথ্যের জন্য, ডেটা ফ্যান-আউট উদাহরণ দেখুন।

উদাহরণস্বরূপ, push() একটি সামাজিক অ্যাপ্লিকেশনের পোস্টের তালিকায় একটি নতুন পোস্ট যোগ করতে ব্যবহার করা যেতে পারে:

DatabaseReference postListRef = FirebaseDatabase.instance.ref("posts");
DatabaseReference newPostRef = postListRef.push();
newPostRef.set({
  // ...
});

শিশু ঘটনা শুনুন

শিশু ঘটনাগুলি নির্দিষ্ট অপারেশনের প্রতিক্রিয়া হিসাবে ট্রিগার করা হয় যা একটি অপারেশন থেকে নোডের শিশুদের ক্ষেত্রে ঘটে যেমন push() পদ্ধতির মাধ্যমে একটি নতুন শিশু যোগ করা বা update() পদ্ধতির মাধ্যমে একটি শিশু আপডেট করা।

ঘটনা সাধারণ ব্যবহার
onChildAdded আইটেমগুলির তালিকা পুনরুদ্ধার করুন বা আইটেমগুলির একটি তালিকায় সংযোজনের জন্য শুনুন। এই ইভেন্টটি প্রতিটি বিদ্যমান শিশুর জন্য একবার ট্রিগার করা হয় এবং তারপরে প্রতিবার নির্দিষ্ট পথে একটি নতুন শিশু যোগ করা হয়। শ্রোতাকে নতুন সন্তানের ডেটা সম্বলিত একটি স্ন্যাপশট দেওয়া হয়।
onChildChanged একটি তালিকার আইটেম পরিবর্তনের জন্য শুনুন. একটি চাইল্ড নোড পরিবর্তন করা হলে এই ইভেন্টটি ট্রিগার করা হয়। এর মধ্যে চাইল্ড নোডের বংশধরদের যেকোনো পরিবর্তন অন্তর্ভুক্ত রয়েছে। ইভেন্ট শ্রোতার কাছে পাঠানো স্ন্যাপশটে সন্তানের জন্য আপডেট করা ডেটা রয়েছে।
onChildRemoved একটি তালিকা থেকে আইটেম মুছে ফেলার জন্য শুনুন. এই ইভেন্টটি ট্রিগার হয় যখন একটি অবিলম্বে শিশুকে সরানো হয়৷ কলব্যাক ব্লকে পাস করা স্ন্যাপশটে সরানো সন্তানের ডেটা থাকে৷
onChildMoved অর্ডার করা তালিকায় আইটেমের ক্রম পরিবর্তনের জন্য শুনুন। onChildMoved ইভেন্টগুলি সর্বদা onChildChanged ইভেন্ট অনুসরণ করে যা আইটেমের অর্ডার পরিবর্তন করে (আপনার বর্তমান অর্ডার পদ্ধতির উপর ভিত্তি করে)।

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

final commentsRef = FirebaseDatabase.instance.ref("post-comments/$postId");
commentsRef.onChildAdded.listen((event) {
  // A new comment has been added, so add it to the displayed list.
});
commentsRef.onChildChanged.listen((event) {
  // A comment has changed; use the key to determine if we are displaying this
  // comment and if so displayed the changed comment.
});
commentsRef.onChildRemoved.listen((event) {
  // A comment has been removed; use the key to determine if we are displaying
  // this comment and if so remove it.
});

মান ঘটনা জন্য শুনুন

যদিও শিশু ইভেন্টের জন্য শোনা তথ্যের তালিকা পড়ার প্রস্তাবিত উপায়, সেখানে এমন পরিস্থিতিতে আছে যে তালিকার রেফারেন্সে মূল্য ইভেন্টের জন্য শোনা দরকারী।

ডেটার একটি তালিকার সাথে একটি value শ্রোতাকে সংযুক্ত করলে ডেটার সম্পূর্ণ তালিকাটি একটি একক স্ন্যাপশট হিসাবে ফিরে আসবে যা আপনি পৃথক শিশুদের অ্যাক্সেস করতে লুপ করতে পারেন।

এমনকি যখন ক্যোয়ারীটির জন্য শুধুমাত্র একটি মিল থাকে, তখনও স্ন্যাপশটটি একটি তালিকা; এটা শুধু একটি আইটেম রয়েছে. আইটেমটি অ্যাক্সেস করতে, আপনাকে ফলাফলটি লুপ করতে হবে:

myTopPostsQuery.onValue.listen((event) {
  for (final child in event.snapshot.children) {
    // Handle the post.
  }
}, onError: (error) {
  // Error.
});

এই প্যাটার্নটি উপযোগী হতে পারে যখন আপনি অতিরিক্ত শিশু যুক্ত ইভেন্টের জন্য শোনার পরিবর্তে একটি একক অপারেশনে একটি তালিকার সমস্ত শিশু আনতে চান।

তথ্য বাছাই এবং ফিল্টারিং

আপনি কী দ্বারা বাছাই করা ডেটা পুনরুদ্ধার করতে Query ক্লাস ব্যবহার করতে পারেন, মান অনুসারে বা শিশুর মান অনুসারে। আপনি বাছাই করা ফলাফলকে নির্দিষ্ট সংখ্যক ফলাফল বা কী বা মানের পরিসরে ফিল্টার করতে পারেন।

তথ্য সাজান

বাছাই করা ডেটা পুনরুদ্ধার করতে, ফলাফলগুলি কীভাবে অর্ডার করা হয় তা নির্ধারণ করতে অর্ডার-বাই পদ্ধতিগুলির একটি নির্দিষ্ট করে শুরু করুন:

পদ্ধতি ব্যবহার
orderByChild() একটি নির্দিষ্ট চাইল্ড কী বা নেস্টেড চাইল্ড পাথের মান অনুসারে ফলাফল ক্রম করুন।
orderByKey() চাইল্ড কী দ্বারা ফলাফল অর্ডার করুন।
orderByValue() সন্তানের মান অনুযায়ী ফলাফল ক্রম করুন।

আপনি একটি সময়ে শুধুমাত্র একটি অর্ডার পদ্ধতি ব্যবহার করতে পারেন. একই ক্যোয়ারীতে একাধিকবার অর্ডার-বাই মেথড কল করলে একটি ত্রুটি দেখা দেয়।

নিম্নলিখিত উদাহরণটি দেখায় যে আপনি কীভাবে একজন ব্যবহারকারীর শীর্ষ পোস্টের তালিকা পুনরুদ্ধার করতে পারেন তাদের তারকা সংখ্যা অনুসারে সাজানো:

final myUserId = FirebaseAuth.instance.currentUser?.uid;
final topUserPostsRef = FirebaseDatabase.instance
    .ref("user-posts/$myUserId")
    .orderByChild("starCount");

এটি একটি ক্যোয়ারীকে সংজ্ঞায়িত করে যেটি একটি শিশু শ্রোতার সাথে মিলিত হলে ক্লায়েন্টকে তাদের ব্যবহারকারী আইডির উপর ভিত্তি করে ডাটাবেসের পাথ থেকে ব্যবহারকারীর পোস্টের সাথে সিঙ্ক্রোনাইজ করে, প্রতিটি পোস্টে প্রাপ্ত তারার সংখ্যা অনুসারে অর্ডার করা হয়। আইডিগুলিকে সূচক কী হিসাবে ব্যবহার করার এই কৌশলটিকে ডেটা ফ্যান আউট বলা হয়, আপনি এটি সম্পর্কে আরও পড়তে পারেন আপনার ডেটাবেসের কাঠামোতে

orderByChild() পদ্ধতিতে কল করা ফলাফলের অর্ডার করার জন্য চাইল্ড কী নির্দিষ্ট করে। এই ক্ষেত্রে, পোস্টগুলি তাদের নিজ নিজ "starCount" সন্তানের মান অনুসারে সাজানো হয়। আপনার কাছে এমন ডেটা থাকলে নেস্টেড বাচ্চাদের দ্বারাও কোয়েরি অর্ডার করা যেতে পারে:

"posts": {
  "ts-functions": {
    "metrics": {
      "views" : 1200000,
      "likes" : 251000,
      "shares": 1200,
    },
    "title" : "Why you should use TypeScript for writing Cloud Functions",
    "author": "Doug",
  },
  "android-arch-3": {
    "metrics": {
      "views" : 900000,
      "likes" : 117000,
      "shares": 144,
    },
    "title" : "Using Android Architecture Components with Firebase Realtime Database (Part 3)",
    "author": "Doug",
  }
},

এই ক্ষেত্রে, আমরা আমাদের orderByChild() কলে নেস্টেড চাইল্ডের আপেক্ষিক পাথ নির্দিষ্ট করে metrics কী-এর অধীনে নেস্ট করা মান অনুসারে আমাদের তালিকার উপাদানগুলিকে অর্ডার করতে পারি।

final mostViewedPosts =
    FirebaseDatabase.instance.ref('posts').orderByChild('metrics/views');

অন্যান্য ডেটার ধরনগুলি কীভাবে অর্ডার করা হয় সে সম্পর্কে আরও তথ্যের জন্য, কীভাবে কোয়েরি ডেটা অর্ডার করা হয় তা দেখুন৷

ফিল্টারিং ডেটা

ডেটা ফিল্টার করার জন্য, আপনি একটি ক্যোয়ারী তৈরি করার সময় একটি অর্ডার-বাই পদ্ধতির সাথে সীমা বা পরিসরের যে কোনো পদ্ধতি একত্রিত করতে পারেন।

পদ্ধতি ব্যবহার
limitToFirst() ফলাফলের অর্ডার করা তালিকার শুরু থেকে আইটেমের সর্বাধিক সংখ্যা সেট করে।
limitToLast() ফলাফলের অর্ডারকৃত তালিকার শেষ থেকে ফেরার জন্য আইটেমের সর্বাধিক সংখ্যা সেট করে।
startAt() ক্রম অনুসারে নির্বাচিত পদ্ধতির উপর নির্ভর করে নির্দিষ্ট কী বা মানের চেয়ে বড় বা সমান আইটেমগুলি ফেরত দিন।
startAfter() ক্রম অনুসারে নির্বাচিত পদ্ধতির উপর নির্ভর করে নির্দিষ্ট কী বা মানের চেয়ে বড় আইটেমগুলি ফেরত দিন।
endAt() ক্রম অনুসারে নির্বাচিত পদ্ধতির উপর নির্ভর করে নির্দিষ্ট কী বা মানের থেকে কম বা সমান আইটেমগুলি ফেরত দিন।
endBefore() ক্রম অনুসারে নির্বাচিত পদ্ধতির উপর নির্ভর করে নির্দিষ্ট কী বা মানের চেয়ে কম আইটেমগুলি ফেরত দিন।
equalTo() ক্রম অনুসারে নির্বাচিত পদ্ধতির উপর নির্ভর করে নির্দিষ্ট কী বা মানের সমান আইটেমগুলি ফেরত দিন।

অর্ডার-বাই পদ্ধতির বিপরীতে, আপনি একাধিক সীমা বা পরিসর ফাংশন একত্রিত করতে পারেন। উদাহরণস্বরূপ, আপনি ফলাফলগুলিকে একটি নির্দিষ্ট মানের পরিসরে সীমাবদ্ধ করতে startAt() এবং endAt() পদ্ধতিগুলিকে একত্রিত করতে পারেন।

ফলাফলের সংখ্যা সীমিত করুন

একটি প্রদত্ত ইভেন্টের জন্য সিঙ্ক করার জন্য সর্বাধিক সংখ্যক শিশু সেট করতে আপনি limitToFirst() এবং limitToLast() পদ্ধতি ব্যবহার করতে পারেন। উদাহরণস্বরূপ, যদি আপনি 100 এর সীমা সেট করতে limitToFirst() ব্যবহার করেন, আপনি প্রাথমিকভাবে শুধুমাত্র 100টি পর্যন্ত onChildAdded ইভেন্ট পাবেন। আপনার ফায়ারবেস ডাটাবেসে 100টিরও কম আইটেম সংরক্ষিত থাকলে, প্রতিটি আইটেমের জন্য একটি onChildAdded ইভেন্ট চালু হয়।

আইটেমগুলি পরিবর্তন হওয়ার সাথে সাথে, আপনি ক্যোয়ারী প্রবেশ করা আইটেমগুলির জন্য onChildAdded ইভেন্টগুলি এবং এটি থেকে বাদ পড়া আইটেমগুলির জন্য onChildRemoved ইভেন্টগুলি পাবেন যাতে মোট সংখ্যা 100-এ থাকে৷

নিম্নলিখিত উদাহরণটি দেখায় কিভাবে উদাহরণ ব্লগিং অ্যাপটি সমস্ত ব্যবহারকারীদের দ্বারা 100টি সাম্প্রতিক পোস্টের একটি তালিকা পুনরুদ্ধার করার জন্য একটি প্রশ্নকে সংজ্ঞায়িত করে:

final recentPostsRef = FirebaseDatabase.instance.ref('posts').limitToLast(100);

এই উদাহরণটি শুধুমাত্র একটি ক্যোয়ারীকে সংজ্ঞায়িত করে, আসলে ডেটা সিঙ্ক্রোনাইজ করার জন্য এটির একটি সংযুক্ত শ্রোতা থাকা প্রয়োজন।

কী বা মান দ্বারা ফিল্টার করুন

প্রশ্নগুলির জন্য নির্বিচারে শুরু, শেষ এবং সমতুল্য পয়েন্টগুলি বেছে নিতে আপনি startAt() , startAfter() , endAt() , endBefore() , এবং equalTo() ব্যবহার করতে পারেন। এটি ডেটা পেজিনেট করার জন্য বা শিশুদের সাথে আইটেম খুঁজে বের করার জন্য দরকারী হতে পারে যেগুলির একটি নির্দিষ্ট মান রয়েছে৷

কিভাবে কোয়েরি ডেটা অর্ডার করা হয়

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

orderByChild

orderByChild() ব্যবহার করার সময়, নির্দিষ্ট চাইল্ড কী ধারণ করে এমন ডেটা নিম্নরূপ সাজানো হয়:

  1. নির্দিষ্ট চাইল্ড কী-এর জন্য একটি null মান সহ শিশুরা প্রথমে আসে।
  2. নির্দিষ্ট চাইল্ড কী-এর জন্য false এর মান সহ শিশু পরবর্তী আসে। যদি একাধিক শিশুর false মান থাকে, তাহলে সেগুলোকে কী দ্বারা অভিধানিকভাবে সাজানো হয়।
  3. নির্দিষ্ট চাইল্ড কী-এর জন্য true মান সহ শিশু পরবর্তী আসে। যদি একাধিক বাচ্চাদের true মান থাকে, তবে সেগুলি কী দ্বারা অভিধানিকভাবে সাজানো হয়।
  4. একটি সাংখ্যিক মান সহ বাচ্চারা পরবর্তীতে আসে, আরোহী ক্রমে সাজানো হয়। যদি নির্দিষ্ট চাইল্ড নোডের জন্য একাধিক বাচ্চার সংখ্যাগত মান একই থাকে, তবে সেগুলি কী দ্বারা বাছাই করা হয়।
  5. স্ট্রিংগুলি সংখ্যার পরে আসে এবং ঊর্ধ্বক্রমানুসারে অভিধানিকভাবে সাজানো হয়। যদি নির্দিষ্ট চাইল্ড নোডের জন্য একাধিক বাচ্চার মান একই থাকে, তবে সেগুলি কী দ্বারা অভিধানিকভাবে অর্ডার করা হয়।
  6. অবজেক্ট সবশেষে আসে এবং ঊর্ধ্বক্রম অনুসারে কী দ্বারা অভিধানিকভাবে সাজানো হয়।

orderByKey

আপনার ডেটা সাজানোর জন্য orderByKey() ব্যবহার করার সময়, কী দ্বারা ডেটা ক্রমবর্ধমান ক্রমে ফেরত দেওয়া হয়।

  1. একটি 32-বিট পূর্ণসংখ্যা হিসাবে পার্স করা যেতে পারে এমন একটি কী সহ বাচ্চারা প্রথমে আসে, আরোহী ক্রমে সাজানো হয়।
  2. একটি স্ট্রিং মান সহ বাচ্চারা তাদের কী হিসাবে পরবর্তী আসে, লেক্সিকোগ্রাফিকভাবে আরোহী ক্রমে সাজানো হয়।

orderByValue

orderByValue() ব্যবহার করার সময়, বাচ্চাদের তাদের মান অনুসারে অর্ডার করা হয়। অর্ডার করার মানদণ্ড orderByChild() এর মতোই, নোডের মানটি একটি নির্দিষ্ট চাইল্ড কী-এর মানের পরিবর্তে ব্যবহার করা ছাড়া।

শ্রোতাদের বিচ্ছিন্ন করুন

আপনার ফায়ারবেস ডাটাবেস রেফারেন্সে off() পদ্ধতিতে কল করে কলব্যাকগুলি সরানো হয়।

আপনি একটি একক শ্রোতাকে একটি প্যারামিটার হিসাবে off() এ পাস করে অপসারণ করতে পারেন। কোনো আর্গুমেন্ট ছাড়াই লোকেশনে কল করা off() সেই অবস্থানের সমস্ত শ্রোতাদের সরিয়ে দেয়।

একটি অভিভাবক শ্রোতাকে কল করা off() এর চাইল্ড নোডগুলিতে নিবন্ধিত শ্রোতাদের স্বয়ংক্রিয়ভাবে সরিয়ে দেয় না; off() যেকোন শিশু শ্রোতাদের কলব্যাক অপসারণের জন্যও ডাকতে হবে।

পরবর্তী পদক্ষেপ