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

डेटाबेस के बारे में जानकारी पाएं

डेटाबेस से डेटा पढ़ने या उसमें बदलाव करने के लिए, आपको के इंस्टेंस की ज़रूरत होगी DatabaseReference:

DatabaseReference ref = FirebaseDatabase.instance.ref();

पढ़ने और लिखने की सूचियां

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

एक से ज़्यादा उपयोगकर्ताओं वाले ऐप्लिकेशन की किसी सूची में डेटा जोड़ने के लिए, push() तरीके का इस्तेमाल करें. जब भी किसी नए बच्चे को खाते में जोड़ा जाता है, तब push() तरीका एक यूनीक कुंजी जनरेट करता है खास Firebase रेफ़रंस के लिए. हर इमेज के लिए अपने-आप जनरेट होने वाली इन कुंजियों का इस्तेमाल करके नया एलिमेंट है, तो कई क्लाइंट एक ही स्थान पर बच्चों को जोड़ सकते हैं करने के साथ-साथ एक ही समय पर निपटाएं. वह कुंजी जिसे 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",
  }
},

इस मामले में, हम अपनी सूची के एलिमेंट को metrics कुंजी जोड़ने के लिए, हम नेस्ट किए गए चाइल्ड का रिलेटिव पाथ तय करते हैं orderByChild() कॉल.

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

अन्य डेटा टाइप को क्रम से लगाने के तरीके के बारे में ज़्यादा जानने के लिए, क्वेरी डेटा को क्रम से लगाने का तरीका देखें.

डेटा फ़िल्टर करना

डेटा फ़िल्टर करने के लिए, सीमा या रेंज में से किसी एक तरीके को क्वेरी तैयार करते समय, एक-एक करके तय किए गए क्रम में.

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

क्रम के हिसाब से क्रम में लगाने वाले तरीकों के उलट, एक से ज़्यादा सीमा या रेंज फ़ंक्शन को जोड़ा जा सकता है. उदाहरण के लिए, सीमा तय करने के लिए, startAt() और endAt() तरीकों को मिलाया जा सकता है वैल्यू की तय सीमा तक नतीजे दिखाता है.

नतीजों की संख्या को सीमित करें

limitToFirst() और limitToLast() तरीकों का इस्तेमाल करके दिए गए इवेंट के लिए, बच्चों को ज़्यादा से ज़्यादा संख्या में सिंक किया जा सकता है. उदाहरण के लिए, अगर तो आप limitToFirst() का इस्तेमाल करके 100 की सीमा सेट करते हैं. शुरुआत में ज़्यादा से ज़्यादा 100 onChildAdded इवेंट. अगर आपने अपने स्टोर में 100 से कम आइटम सेव किए हैं, Firebase डेटाबेस, हर आइटम के लिए 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() तरीके को कॉल करने पर, कॉलबैक हट जाते हैं Firebase डेटाबेस का रेफ़रंस.

किसी एक लिसनर को off() के लिए पैरामीटर के तौर पर पास करके, उसे हटाया जा सकता है. बिना किसी तर्क के off() को इस जगह पर कॉल करने से उस जगह के सभी लिसनर हट जाते हैं स्थान.

पैरंट लिसनर पर, off() को कॉल करने से अपने चाइल्ड नोड पर रजिस्टर किए गए लिसनर को अपने-आप हटा दें; चाइल्ड लिसनर के लिए भी off() को कॉल किया जाना चाहिए कॉलबैक हटाने के लिए.

अगले चरण