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

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

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

Web

import { getDatabase } from "firebase/database";

const database = getDatabase();

Web

var database = firebase.database();

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

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

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

আপনি push() পদ্ধতি দ্বারা ফেরত আসা নতুন ডেটার রেফারেন্স ব্যবহার করে চাইল্ডের অটো-জেনারেটেড কী বা সেট ডেটার মান পেতে পারেন। push() রেফারেন্সের .key প্রোপার্টিতে অটো-জেনারেটেড কী থাকে।

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

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

Web

import { getDatabase, ref, push, set } from "firebase/database";

// Create a new post reference with an auto-generated id
const db = getDatabase();
const postListRef = ref(db, 'posts');
const newPostRef = push(postListRef);
set(newPostRef, {
    // ...
});

Web

// Create a new post reference with an auto-generated id
var postListRef = firebase.database().ref('posts');
var newPostRef = postListRef.push();
newPostRef.set({
    // ...
});

শিশুদের ঘটনা শুনুন

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

ইভেন্ট সাধারণ ব্যবহার
child_added আইটেমের তালিকা পুনরুদ্ধার করুন অথবা আইটেমের তালিকায় সংযোজনের জন্য শুনুন। এই ইভেন্টটি প্রতিটি বিদ্যমান সন্তানের জন্য একবার ট্রিগার করা হয় এবং তারপর প্রতিবার যখন একটি নতুন শিশু নির্দিষ্ট পথে যোগ করা হয় তখন আবার শুরু হয়। শ্রোতাকে নতুন সন্তানের ডেটা সম্বলিত একটি স্ন্যাপশট পাঠানো হয়।
child_changed তালিকার আইটেমগুলিতে পরিবর্তনগুলি শুনুন। যখনই কোনও চাইল্ড নোড পরিবর্তন করা হয় তখনই এই ইভেন্টটি ট্রিগার হয়। এর মধ্যে চাইল্ড নোডের ডিসেন্ডেন্টগুলিতে যেকোনো পরিবর্তন অন্তর্ভুক্ত থাকে। ইভেন্ট লিসেনারের কাছে পাঠানো স্ন্যাপশটে চাইল্ডের আপডেট করা ডেটা থাকে।
child_removed তালিকা থেকে আইটেমগুলি সরানো হচ্ছে কিনা তা শুনুন। যখন কোনও তাৎক্ষণিক শিশু সরানো হয় তখন এই ইভেন্টটি ট্রিগার হয়। কলব্যাক ব্লকে পাঠানো স্ন্যাপশটে সরানো শিশুটির ডেটা থাকে।
child_moved একটি ক্রমানুসার তালিকার আইটেমের ক্রম পরিবর্তনের জন্য মনোযোগ দিন। child_moved ইভেন্টগুলি সর্বদা child_changed ইভেন্ট অনুসরণ করে যার কারণে আইটেমের ক্রম পরিবর্তন হয়েছে (আপনার বর্তমান ক্রম অনুসারে পদ্ধতির উপর ভিত্তি করে)।

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

Web

import { getDatabase, ref, onChildAdded, onChildChanged, onChildRemoved } from "firebase/database";

const db = getDatabase();
const commentsRef = ref(db, 'post-comments/' + postId);
onChildAdded(commentsRef, (data) => {
  addCommentElement(postElement, data.key, data.val().text, data.val().author);
});

onChildChanged(commentsRef, (data) => {
  setCommentValues(postElement, data.key, data.val().text, data.val().author);
});

onChildRemoved(commentsRef, (data) => {
  deleteComment(postElement, data.key);
});

Web

var commentsRef = firebase.database().ref('post-comments/' + postId);
commentsRef.on('child_added', (data) => {
  addCommentElement(postElement, data.key, data.val().text, data.val().author);
});

commentsRef.on('child_changed', (data) => {
  setCommentValues(postElement, data.key, data.val().text, data.val().author);
});

commentsRef.on('child_removed', (data) => {
  deleteComment(postElement, data.key);
});

মূল্যবান ঘটনাগুলি শুনুন

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

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

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

Web

import { getDatabase, ref, onValue } from "firebase/database";

const db = getDatabase();
const dbRef = ref(db, '/a/b/c');

onValue(dbRef, (snapshot) => {
  snapshot.forEach((childSnapshot) => {
    const childKey = childSnapshot.key;
    const childData = childSnapshot.val();
    // ...
  });
}, {
  onlyOnce: true
});

Web

ref.once('value', (snapshot) => {
  snapshot.forEach((childSnapshot) => {
    var childKey = childSnapshot.key;
    var childData = childSnapshot.val();
    // ...
  });
});

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

ডেটা বাছাই এবং ফিল্টার করা

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

ডেটা সাজান

সাজানো ডেটা পুনরুদ্ধার করতে, ফলাফল কীভাবে সাজানো হবে তা নির্ধারণ করার জন্য ক্রম-দ্বারা পদ্ধতিগুলির একটি নির্দিষ্ট করে শুরু করুন:

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

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

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

Web

import { getDatabase, ref, query, orderByChild } from "firebase/database";
import { getAuth } from "firebase/auth";

const db = getDatabase();
const auth = getAuth();

const myUserId = auth.currentUser.uid;
const topUserPostsRef = query(ref(db, 'user-posts/' + myUserId), orderByChild('starCount'));

Web

var myUserId = firebase.auth().currentUser.uid;
var topUserPostsRef = firebase.database().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",
  }
},

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

Web

import { getDatabase, ref, query, orderByChild } from "firebase/database";

const db = getDatabase();
const mostViewedPosts = query(ref(db, 'posts'), orderByChild('metrics/views'));

Web

var mostViewedPosts = firebase.database().ref('posts').orderByChild('metrics/views');

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

ডেটা ফিল্টার করা হচ্ছে

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

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

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

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

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

আইটেম পরিবর্তনের সাথে সাথে, আপনি কোয়েরিতে প্রবেশ করা আইটেমগুলির জন্য child_added ইভেন্ট এবং বাদ পড়া আইটেমগুলির জন্য child_removed ইভেন্ট পাবেন যাতে মোট সংখ্যা 100 থাকে।

নিম্নলিখিত উদাহরণটি দেখায় যে কীভাবে example blogging app সমস্ত ব্যবহারকারীর দ্বারা সাম্প্রতিক ১০০টি পোস্টের তালিকা পুনরুদ্ধার করার জন্য একটি কোয়েরি সংজ্ঞায়িত করে:

Web

import { getDatabase, ref, query, limitToLast } from "firebase/database";

const db = getDatabase();
const recentPostsRef = query(ref(db, 'posts'), limitToLast(100));

Web

var recentPostsRef = firebase.database().ref('posts').limitToLast(100);

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

কী বা মান অনুসারে ফিল্টার করুন

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

কোয়েরি ডেটা কীভাবে সাজানো হয়

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

orderByChild

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

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

orderByKey

আপনার ডেটা সাজানোর জন্য orderByKey() ব্যবহার করার সময়, কী অনুসারে ডেটা ঊর্ধ্বমুখী ক্রমে ফেরত পাঠানো হয়।

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

orderByValue

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

শ্রোতাদের আলাদা করুন

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

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

প্যারেন্ট লিসেনারের off() কলিং তার চাইল্ড নোডে নিবন্ধিত লিসেনারের ক্ষেত্রে স্বয়ংক্রিয়ভাবে মুছে ফেলা হয় না; কলব্যাকটি সরাতে যেকোনো চাইল্ড লিসেনারের ক্ষেত্রেও off() কল করতে হবে।

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