इस पेज का अनुवाद Cloud Translation API से किया गया है.
Switch to English

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

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

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

// Get a reference to the database service
var database = firebase.database();

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

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

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

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

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

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

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

बच्चे घटनाओं के लिए सुनो

विशेष घटनाओं के जवाब में बच्चे की घटनाओं को ट्रिगर किया जाता है जो एक ऑपरेशन से नोड के बच्चों को होता है जैसे कि push() माध्यम से जोड़ा गया एक नया बच्चा push() विधि या update() विधि के माध्यम से update() किया जा रहा बच्चा।

प्रतिस्पर्धा विशिष्ट उपयोग
child_added आइटमों की सूची प्राप्त करें या आइटम की सूची में परिवर्धन के लिए सुनें। यह घटना प्रत्येक मौजूदा बच्चे के लिए एक बार शुरू हो जाती है और फिर हर बार एक नए बच्चे को निर्दिष्ट पथ पर जोड़ा जाता है। श्रोता को एक स्नैपशॉट दिया जाता है जिसमें नए बच्चे का डेटा होता है।
child_changed किसी सूची में आइटम में परिवर्तन के लिए सुनो। किसी भी समय बच्चे के नोड को संशोधित करने पर यह घटना शुरू हो जाती है। इसमें चाइल्ड नोड के वंशजों में कोई संशोधन शामिल है। इवेंट श्रोता को दिए गए स्नैपशॉट में बच्चे के लिए अपडेट किया गया डेटा है।
child_removed एक सूची से हटाए जा रहे आइटमों के लिए सुनो। इस घटना को ट्रिगर किया जाता है जब एक तत्काल बच्चा निकाल दिया जाता है। कॉलबैक ब्लॉक में पारित स्नैपशॉट में हटाए गए बच्चे के लिए डेटा होता है।
child_moved ऑर्डर की गई सूची में आइटम के क्रम में बदलाव के लिए सुनो। child_moved इवेंट हमेशा child_moved इवेंट को फॉलो करते हैं child_changed कारण आइटम का ऑर्डर बदल गया (आपके वर्तमान ऑर्डर-बाय मेथड के आधार पर)।

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

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

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

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

मूल्य घटनाओं के लिए सुनो

जबकि बच्चे की घटनाओं के लिए डेटा की सूचियों को पढ़ने के लिए अनुशंसित तरीका है, ऐसी स्थितियां हैं जो सूची संदर्भ पर मूल्य की घटनाओं को सुनने के लिए उपयोगी हैं।

डेटा की एक सूची के लिए एक value ऑब्जर्वर संलग्न करना डेटा की पूरी सूची को एक सिंगल स्नैपशॉट के रूप में लौटाएगा जिसे आप व्यक्तिगत बच्चों तक पहुंचने के लिए फिर से पा सकते हैं।

जब क्वेरी के लिए केवल एक ही मैच होता है, तब भी स्नैपशॉट अभी भी एक सूची है; इसमें सिर्फ एक आइटम शामिल है। आइटम तक पहुंचने के लिए, आपको परिणाम पर लूप करने की आवश्यकता है:

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

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

डेटा को क्रमबद्ध करना और फ़िल्टर करना

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

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

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

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

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

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

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() कॉल।

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

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

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

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

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

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

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

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

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

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

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

यह उदाहरण केवल एक क्वेरी को परिभाषित करता है, वास्तव में डेटा को सिंक्रनाइज़ करने के लिए इसे एक संलग्न श्रोता की आवश्यकता होती है

कुंजी या मान से फ़िल्टर करें

आप मनमाने ढंग से शुरू करने, समाप्त करने, और प्रश्नों के लिए तुल्यता अंक चुनने के लिए startAt() , endAt() , और equalTo() का उपयोग कर सकते हैं। यह उन डेटा के लिए उपयोगी हो सकता है या उन बच्चों के साथ आइटम ढूंढ सकता है जिनके पास एक विशिष्ट मूल्य है।

क्वेरी डेटा कैसे ऑर्डर किया जाता है

यह खंड बताता है कि Query वर्ग में प्रत्येक क्रम-क्रम विधियों द्वारा डेटा को कैसे सॉर्ट किया जाता है।

orderByChild

orderByChild() का उपयोग करते orderByChild() , निर्दिष्ट चाइल्ड कुंजी वाले डेटा को निम्नानुसार ऑर्डर किया जाता है:

  1. निर्दिष्ट चाइल्ड कुंजी के लिए null मान वाले बच्चे पहले आते हैं।
  2. निर्दिष्ट चाइल्ड कुंजी के लिए false मान वाले बच्चे अगले आते हैं। कई बच्चों के एक मूल्य है, तो false है, वे हल कर रहे हैं कोषगत कुंजी के द्वारा।
  3. निर्दिष्ट चाइल्ड कुंजी के लिए true मूल्य वाले बच्चे अगले आते हैं। यदि कई बच्चों के पास true मूल्य true , तो वे कुंजी द्वारा क्रमबद्ध रूप से छांटे जाते हैं।
  4. संख्यात्मक मान वाले बच्चे अगले क्रम में आते हैं, आरोही क्रम में क्रमबद्ध। यदि निर्दिष्ट चाइल्ड नोड के लिए कई बच्चों के पास एक ही संख्यात्मक मान है, तो वे कुंजी द्वारा सॉर्ट किए जाते हैं।
  5. स्ट्रिंग्स नंबरों के बाद आते हैं और बढ़ते क्रम में लेक्सोग्राफिक रूप से सॉर्ट किए जाते हैं। यदि कई बच्चों के निर्दिष्ट बाल नोड के लिए समान मूल्य है, तो उन्हें कुंजी द्वारा शाब्दिक रूप से आदेश दिया जाता है।
  6. ऑब्जेक्ट अंतिम आते हैं और आरोही क्रम में कुंजी द्वारा क्रमबद्ध रूप से क्रमबद्ध किए जाते हैं।

orderByKey

अपने डेटा को सॉर्ट करने के लिए orderByKey() का उपयोग करते orderByKey() , डेटा कुंजी द्वारा आरोही क्रम में वापस आ जाता है।

  1. 32-बिट पूर्णांक के रूप में पार्स की जा सकने वाली कुंजी वाले बच्चों को आरोही क्रम में क्रमबद्ध किया जाता है।
  2. उनकी कुंजी के रूप में एक स्ट्रिंग मान वाले बच्चे अगले आते हैं, आरोही क्रम में शाब्दिक रूप से क्रमबद्ध।

orderByValue

orderByValue() का उपयोग करते orderByValue() , बच्चों को उनके मूल्य का आदेश दिया जाता है। आदेश मानदंड उसी प्रकार हैं जैसे orderByChild() , एक निर्दिष्ट चाइल्ड कुंजी के मूल्य के बजाय नोड के मूल्य का उपयोग किया जाता है।

सुनने वालों को अलग कर लें

आपके फायरबेस डेटाबेस संदर्भ पर off() विधि को कॉल करके कॉलबैक को हटा दिया जाता है।

आप इसे off() करने के लिए एक पैरामीटर के रूप में पास करके एकल श्रोता को हटा सकते हैं off() । बिना किसी तर्क के स्थान पर कॉल off() उस स्थान पर सभी श्रोताओं को हटा देता है।

अभिभावक श्रोता पर कॉल off() अपने बच्चे के नोड पर पंजीकृत श्रोताओं को स्वचालित रूप से नहीं हटाता है; कॉलबैक को हटाने के लिए किसी भी बाल श्रोता को off() भी कहा जाना चाहिए।

अगला कदम