Check out what’s new from Firebase at Google I/O 2022. Learn more

वेब पर डेटा की सूचियों के साथ काम करें

डेटाबेस संदर्भ प्राप्त करें

डेटाबेस से डेटा पढ़ने या लिखने के लिए, आपको firebase.database.Reference का एक उदाहरण चाहिए:

Web version 9

import { getDatabase } from "firebase/database";

const database = getDatabase();

Web version 8

var database = firebase.database();

पढ़ना और लिखना सूचियाँ

डेटा की सूची में जोड़ें

बहुउपयोगकर्ता अनुप्रयोगों में सूची में डेटा जोड़ने के लिए push() विधि का उपयोग करें। जब भी कोई नया बच्चा निर्दिष्ट फायरबेस संदर्भ में जोड़ा जाता है, तो push() विधि एक अद्वितीय कुंजी उत्पन्न करती है। सूची में प्रत्येक नए तत्व के लिए इन ऑटो-जेनरेटेड कुंजियों का उपयोग करके, कई क्लाइंट बिना किसी विरोध के एक ही समय में बच्चों को एक ही स्थान पर जोड़ सकते हैं। push() द्वारा उत्पन्न अद्वितीय कुंजी टाइमस्टैम्प पर आधारित होती है, इसलिए सूची आइटम स्वचालित रूप से कालानुक्रमिक रूप से क्रमबद्ध होते हैं।

आप बच्चे की ऑटो-जेनरेट की गई कुंजी का मान प्राप्त करने या बच्चे के लिए डेटा सेट करने के लिए push() विधि द्वारा लौटाए गए नए डेटा के संदर्भ का उपयोग कर सकते हैं। push() संदर्भ की .key संपत्ति में ऑटो-जेनरेट की गई कुंजी होती है।

आप अपनी डेटा संरचना को समतल करने को आसान बनाने के लिए इन ऑटो-जेनरेटेड कुंजियों का उपयोग कर सकते हैं। अधिक जानकारी के लिए, डेटा फैन-आउट उदाहरण देखें

उदाहरण के लिए, एक सामाजिक अनुप्रयोग में पदों की सूची में एक नई पोस्ट जोड़ने के लिए push() का उपयोग किया जा सकता है:

Web version 9

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 version 8

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

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 version 8

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

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 version 8

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

यह पैटर्न तब उपयोगी हो सकता है जब आप किसी सूची के सभी बच्चों को एक ही ऑपरेशन में लाना चाहते हैं, बजाय अतिरिक्त चाइल्ड एडेड इवेंट्स को सुनने के।

डेटा को छाँटना और फ़िल्टर करना

आप कुंजी, मान या बच्चे के मान के आधार पर सॉर्ट किए गए डेटा को पुनर्प्राप्त करने के लिए रीयलटाइम डेटाबेस Query क्लास का उपयोग कर सकते हैं। आप सॉर्ट किए गए परिणाम को परिणामों की एक विशिष्ट संख्या या कुंजियों या मानों की श्रेणी में भी फ़िल्टर कर सकते हैं।

डेटा क्रमबद्ध करें

सॉर्ट किए गए डेटा को पुनः प्राप्त करने के लिए, परिणामों को कैसे ऑर्डर किया जाता है, यह निर्धारित करने के लिए ऑर्डर-बाय विधियों में से किसी एक को निर्दिष्ट करके प्रारंभ करें:

तरीका प्रयोग
orderByChild() किसी निर्दिष्ट चाइल्ड कुंजी या नेस्टेड चाइल्ड पथ के मान के आधार पर परिणाम ऑर्डर करें।
orderByKey() चाइल्ड कीज़ द्वारा परिणाम ऑर्डर करें।
orderByValue() बाल मूल्यों द्वारा आदेश परिणाम।

आप एक समय में केवल एक ऑर्डर-बाय विधि का उपयोग कर सकते हैं। एक ही क्वेरी में कई बार ऑर्डर-बाय विधि को कॉल करना एक त्रुटि फेंकता है।

निम्न उदाहरण दर्शाता है कि आप किसी उपयोगकर्ता की शीर्ष पोस्ट की सूची को उनकी स्टार संख्या के आधार पर कैसे प्राप्त कर सकते हैं:

Web version 9

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 version 8

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",
  }
},

इस मामले में, हम अपने orderByChild() कॉल में नेस्टेड बच्चे के सापेक्ष पथ को निर्दिष्ट करके metrics कुंजी के तहत नेस्टेड मानों द्वारा हमारे सूची तत्वों को ऑर्डर कर सकते हैं।

Web version 9

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

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

Web version 8

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

अन्य डेटा प्रकारों को कैसे ऑर्डर किया जाता है, इस बारे में अधिक जानकारी के लिए देखें कि क्वेरी डेटा कैसे ऑर्डर किया जाता है

फ़िल्टरिंग डेटा

डेटा फ़िल्टर करने के लिए, आप क्वेरी बनाते समय किसी भी सीमा या श्रेणी विधियों को ऑर्डर-बाय विधि के साथ जोड़ सकते हैं।

तरीका प्रयोग
limitToFirst() परिणामों की क्रमबद्ध सूची की शुरुआत से लौटने के लिए अधिकतम आइटम सेट करता है।
limitToLast() परिणामों की आदेशित सूची के अंत से लौटने के लिए आइटम की अधिकतम संख्या सेट करता है।
startAt() चुनी गई ऑर्डर-बाय विधि के आधार पर, निर्दिष्ट कुंजी या मान से अधिक या उसके बराबर आइटम लौटाएं।
startAfter() चुनी गई ऑर्डर-बाय विधि के आधार पर निर्दिष्ट कुंजी या मान से अधिक आइटम लौटाएं।
endAt() चुनी गई ऑर्डर-बाय विधि के आधार पर, निर्दिष्ट कुंजी या मान से कम या उसके बराबर आइटम लौटाएं।
endBefore() चुनी गई ऑर्डर-बाय विधि के आधार पर निर्दिष्ट कुंजी या मान से कम आइटम लौटाएं।
equalTo() चुनी गई ऑर्डर-बाय विधि के आधार पर, निर्दिष्ट कुंजी या मान के बराबर आइटम लौटाएं।

ऑर्डर-बाय विधियों के विपरीत, आप कई सीमा या श्रेणी कार्यों को जोड़ सकते हैं। उदाहरण के लिए, आप परिणामों को निर्दिष्ट सीमा तक सीमित करने के लिए startAt() और endAt() विधियों को जोड़ सकते हैं।

परिणामों की संख्या सीमित करें

किसी दिए गए ईवेंट के लिए अधिकतम संख्या में बच्चों को सिंक करने के लिए आप limitToFirst() और limitToLast() विधियों का उपयोग कर सकते हैं। उदाहरण के लिए, यदि आप 100 की सीमा निर्धारित करने के लिए limitToFirst() का उपयोग करते हैं, तो आपको शुरुआत में केवल 100 child_added इवेंट प्राप्त होंगे। अगर आपके Firebase डेटाबेस में 100 से कम आइटम संग्रहीत हैं, तो प्रत्येक आइटम के लिए एक child_added ईवेंट सक्रिय होता है।

जैसे ही आइटम बदलते हैं, आपको उन आइटम्स के लिए child_added ईवेंट प्राप्त होते हैं जो क्वेरी में प्रवेश करते हैं और उन आइटम्स के लिए child_removed ईवेंट प्राप्त होते हैं जो इससे बाहर हो जाते हैं ताकि कुल संख्या 100 पर बनी रहे।

निम्नलिखित उदाहरण दर्शाता है कि उदाहरण ब्लॉगिंग ऐप सभी उपयोगकर्ताओं द्वारा 100 सबसे हाल की पोस्ट की सूची को पुनः प्राप्त करने के लिए एक क्वेरी को कैसे परिभाषित करता है:

Web version 9

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

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

Web version 8

var recentPostsRef = firebase.database().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() कॉलबैक को हटाने के लिए किसी भी बाल श्रोताओं पर भी कॉल किया जाना चाहिए।

अगले कदम