डेटा वापस लाया जा रहा है

इस दस्तावेज़ में डेटा वापस पाने के बारे में बुनियादी जानकारी दी गई है. साथ ही, इसमें डेटा को क्रम में लगाने और फ़िल्टर करने का तरीका भी बताया गया है Firebase डेटा.

शुरू करने से पहले

इस्तेमाल करने से पहले रीयलटाइम डेटाबेस, आपको ये काम करने होंगे:

  • अपना Unity प्रोजेक्ट रजिस्टर करें और इसे Firebase का इस्तेमाल करने के लिए कॉन्फ़िगर करें.

    • अगर आपके यूनिटी प्रोजेक्ट में पहले से ही Firebase का इस्तेमाल किया जा रहा है, तो इसका मतलब है कि Firebase के लिए रजिस्टर और कॉन्फ़िगर किया गया है.

    • अगर आपके पास Unity प्रोजेक्ट नहीं है, तो ऐप्लिकेशन का नमूना.

  • Firebase Unity SDK (खास तौर पर, FirebaseDatabase.unitypackage) को आपका Unity प्रोजेक्ट भी सही है.

ध्यान दें कि Firebase को अपने यूनिटी प्रोजेक्ट में जोड़ने पर, Firebase कंसोल और आपके खुले हुए Unity प्रोजेक्ट में उदाहरण के लिए, कंसोल से Firebase कॉन्फ़िगरेशन फ़ाइलें डाउनलोड करें. इसके बाद, उन्हें आपके Unity प्रोजेक्ट में शामिल किया जाएगा.

डेटा वापस लाया जा रहा है

Firebase डेटा को GetValueAsync() को एक बार किए जाने वाले कॉल से वापस लाया जाता है या FirebaseDatabase रेफ़रंस पर किसी इवेंट में अटैच किया जा रहा है. यह इवेंट लिसनर है डेटा की शुरुआती स्थिति के लिए एक बार कॉल किया जाता है और फिर कभी भी डेटा में बदलाव होता है.

DatabaseReference पाएं

डेटाबेस से डेटा पढ़ने के लिए, आपको DatabaseReference का एक इंस्टेंस चाहिए:

using Firebase;
using Firebase.Database;
using Firebase.Extensions.TaskExtension; // for ContinueWithOnMainThread

public class MyScript: MonoBehaviour {
  void Start() {
    // Get the root reference location of the database.
    DatabaseReference reference = FirebaseDatabase.DefaultInstance.RootReference;
  }
}

डेटा को एक बार पढ़ें

का स्टैटिक स्नैपशॉट पढ़ने के लिए, GetValueAsync तरीके का इस्तेमाल किया जा सकता है दिए गए पाथ पर कॉन्टेंट को एक बार. टास्क के नतीजे में एक स्नैपशॉट शामिल होगा उस जगह का सारा डेटा शामिल होता है. इसमें चाइल्ड डेटा भी शामिल है. अगर कोई डेटा नहीं है, तो दिया गया स्नैपशॉट null है.

    FirebaseDatabase.DefaultInstance
      .GetReference("Leaders")
      .GetValueAsync().ContinueWithOnMainThread(task => {
        if (task.IsFaulted) {
          // Handle the error...
        }
        else if (task.IsCompleted) {
          DataSnapshot snapshot = task.Result;
          // Do something with snapshot...
        }
      });

इवेंट सुनें

डेटा में हुए बदलावों के बारे में जानने के लिए, इवेंट लिसनर को जोड़ा जा सकता है:

इवेंट आम तौर पर इस्तेमाल
ValueChanged पाथ की पूरी सामग्री में हुए बदलावों को पढ़ और सुन सकता है.
ChildAdded आइटम की सूचियां पाएं या आइटम की सूची में जोड़े गए आइटम सुनें. ChildChanged और साथ में इस्तेमाल के सुझाव सूचियों में होने वाले बदलावों पर नज़र रखने के लिए ChildRemoved.
ChildChanged सूची में मौजूद आइटम में हुए बदलावों को सुनें. इसके साथ इस्तेमाल करें निगरानी करने के लिए ChildAdded और ChildRemoved सूची में बदलाव.
ChildRemoved सूची से हटाए जा रहे आइटम सुनें. इसके साथ इस्तेमाल करें निगरानी करने के लिए ChildAdded और ChildChanged सूची में बदलाव.
ChildMoved क्रम वाली सूची में आइटम के क्रम में हुए बदलावों को सुनें. ChildMoved इवेंट हमेशा वह ChildChanged इवेंट जिसकी वजह से आइटम का ऑर्डर हुआ बदलें (आपके मौजूदा ऑर्डर के हिसाब से).

ValueChange किया गया इवेंट

इवेंट में होने वाले बदलावों की सदस्यता लेने के लिए, ValueChanged इवेंट का इस्तेमाल किया जा सकता है दिए गए पाथ पर कॉन्टेंट. यह इवेंट एक बार ट्रिगर होता है, जब लिसनर होता है और हर बार बच्चों समेत डेटा में कोई बदलाव होने पर, वह भी बदलता रहता है. इवेंट कॉलबैक को एक स्नैपशॉट पास किया जाता है. इसमें उस जगह का पूरा डेटा शामिल होता है. इसमें यह डेटा भी शामिल है बच्चे का डेटा. अगर कोई डेटा मौजूद नहीं है, तो दिया गया स्नैपशॉट null होता है.

इस उदाहरण में, लीडरबोर्ड के स्कोर हासिल करने वाले गेम के बारे में बताया गया है डेटाबेस से:

      FirebaseDatabase.DefaultInstance
        .GetReference("Leaders")
        .ValueChanged += HandleValueChanged;
    }

    void HandleValueChanged(object sender, ValueChangedEventArgs args) {
      if (args.DatabaseError != null) {
        Debug.LogError(args.DatabaseError.Message);
        return;
      }
      // Do something with the data in args.Snapshot
    }

ValueChangedEventArgs में एक DataSnapshot है, जिसमें इवेंट के समय डेटाबेस में बताई गई जगह की जानकारी देता है. Value को कॉल किया जा रहा है किसी स्नैपशॉट में, डेटा को दिखाने वाला Dictionary<string, object> दिखाता है. अगर जगह पर कोई डेटा मौजूद नहीं है, तो Value को कॉल करने पर null का मैसेज दिखेगा.

इस उदाहरण में, args.DatabaseError की जांच यह देखने के लिए भी की जाती है कि क्या पढ़ी गई रद्द कर दिया गया है. उदाहरण के लिए, अगर क्लाइंट के पास ऐसा नहीं है, तो रीड रद्द की जा सकती है Firebase डेटाबेस की जगह से पढ़ने की अनुमति. DatabaseError से पता चलेगा कि गड़बड़ी क्यों हुई.

आप बाद में किसी भी ऐसे DatabaseReference का इस्तेमाल करके इवेंट की सदस्यता छोड़ सकते हैं जिसमें उसी पथ पर है. DatabaseReference मामला बहुत कम समय के लिए है और माना जा सकता है को ऐक्सेस करने का तरीका बताया गया है.

      FirebaseDatabase.DefaultInstance
        .GetReference("Leaders")
        .ValueChanged -= HandleValueChanged; // unsubscribe from ValueChanged.
    }

बच्चों के इवेंट

चाइल्ड इवेंट, एक कन्वर्ज़न ऐक्शन की वजह से ट्रिगर होते हैं. किसी कार्रवाई से नोड के चिल्ड्रेन जैसे UpdateChildrenAsync() का इस्तेमाल करके, Push() तरीके या चाइल्ड तरीके को अपडेट किया जा रहा है तरीका. ये सभी तरीके एक साथ, आपकी समस्याओं को समझने और किसी डेटाबेस में खास नोड होता है. उदाहरण के लिए, कोई गेम इन तरीकों का इस्तेमाल कर सकता है साथ मिलकर, गेम सेशन की टिप्पणियों की गतिविधि को मॉनिटर किया जा सकता है. इसके बारे में नीचे बताया गया है:

      var ref = FirebaseDatabase.DefaultInstance
      .GetReference("GameSessionComments");

      ref.ChildAdded += HandleChildAdded;
      ref.ChildChanged += HandleChildChanged;
      ref.ChildRemoved += HandleChildRemoved;
      ref.ChildMoved += HandleChildMoved;
    }

    void HandleChildAdded(object sender, ChildChangedEventArgs args) {
      if (args.DatabaseError != null) {
        Debug.LogError(args.DatabaseError.Message);
        return;
      }
      // Do something with the data in args.Snapshot
    }

    void HandleChildChanged(object sender, ChildChangedEventArgs args) {
      if (args.DatabaseError != null) {
        Debug.LogError(args.DatabaseError.Message);
        return;
      }
      // Do something with the data in args.Snapshot
    }

    void HandleChildRemoved(object sender, ChildChangedEventArgs args) {
      if (args.DatabaseError != null) {
        Debug.LogError(args.DatabaseError.Message);
        return;
      }
      // Do something with the data in args.Snapshot
    }

    void HandleChildMoved(object sender, ChildChangedEventArgs args) {
      if (args.DatabaseError != null) {
        Debug.LogError(args.DatabaseError.Message);
        return;
      }
      // Do something with the data in args.Snapshot
    }

ChildAdded इवेंट का इस्तेमाल आम तौर पर, इसकी सूची पाने के लिए किया जाता है आइटम, Firebase डेटाबेस में रखते हैं. ChildAdded इवेंट को एक बार शुरू किया गया है हर मौजूदा बच्चे के लिए और फिर जब भी बताया गया पाथ. लिसनर को एक स्नैपशॉट भेजा जाता है, जिसमें नए बच्चे के डेटा शामिल है.

जब भी चाइल्ड नोड में बदलाव किया जाता है, ChildChanged इवेंट बढ़ता है. इसमें चाइल्ड नोड के डिसेंडेंट में होने वाला कोई भी बदलाव शामिल है. हां आम तौर पर, इसे ChildAdded और ChildRemoved के साथ इस्तेमाल किया जाता है आइटम की सूची में किए गए बदलावों के जवाब देने के लिए इवेंट. स्नैपशॉट को इवेंट लिसनर में बच्चे का अपडेट किया गया डेटा शामिल होता है.

ChildRemoved इवेंट तब ट्रिगर होता है, जब किसी बच्चे को तुरंत हटाया जाता है. आम तौर पर, इसे ChildAdded और ChildChanged कॉलबैक. इवेंट कॉलबैक को भेजे गए स्नैपशॉट में यह शामिल है हटाए गए बच्चे का डेटा.

ChildChanged जब भी ट्रिगर होता है, तब ChildMoved इवेंट ट्रिगर होता है इवेंट में कोई अपडेट शामिल होता है, जिसकी वजह से बच्चे का क्रम बदल जाता है. हां OrderByChild या OrderByValue के साथ ऑर्डर किए गए डेटा के साथ इस्तेमाल किया जाता है.

डेटा को क्रम से लगाना और फ़िल्टर करना

रीयलटाइम डेटाबेस Query क्लास का इस्तेमाल करके, क्रम से लगाया गया डेटा वापस पाया जा सकता है वैल्यू या वैल्यू के हिसाब से तय किया जा सकता है. फ़िल्टर भी किया जा सकता है नतीजों की तय संख्या या कुंजियों की रेंज के लिए क्रम से लगाया गया नतीजा या वैल्यू.

डेटा को क्रम से लगाएं

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

तरीका इस्तेमाल किए जाने से जुड़ी जानकारी
OrderByChild() किसी खास चाइल्ड कुंजी की वैल्यू के हिसाब से नतीजों को क्रम से लगाएं.
OrderByKey() चाइल्ड कुंजियों के हिसाब से नतीजों को क्रम से लगाएं.
OrderByValue() चाइल्ड वैल्यू के हिसाब से नतीजों को क्रम से लगाएं.

ऑर्डर करने के लिए, एक बार में सिर्फ़ एक तरीका इस्तेमाल किया जा सकता है. आदेश-दर-चरण कॉल करना एक ही क्वेरी में कई बार आने पर गड़बड़ी होती है.

इस उदाहरण में, स्कोर देकर सदस्यता लेने का तरीका बताया गया है लीडरबोर्ड को स्कोर के हिसाब से क्रम में लगाया जाता है.

      FirebaseDatabase.DefaultInstance
        .GetReference("Leaders").OrderByChild("score")
        .ValueChanged += HandleValueChanged;
    }

    void HandleValueChanged(object sender, ValueChangedEventArgs args) {
      if (args.DatabaseError != null) {
        Debug.LogError(args.DatabaseError.Message);
        return;
      }
      // Do something with the data in args.Snapshot
    }

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

OrderByChild() तरीके को किए गए कॉल से, ऑर्डर करने के लिए चाइल्ड कुंजी तय की जाती है इसके द्वारा परिणाम. इस मामले में, नतीजों को "score" की वैल्यू के हिसाब से क्रम में लगाया जाता है वैल्यू डालें. अन्य डेटा टाइप को क्रम से लगाने के तरीके के बारे में ज़्यादा जानने के लिए, क्वेरी डेटा को क्रम से लगाने का तरीका देखें.

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

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

तरीका इस्तेमाल किए जाने से जुड़ी जानकारी
LimitToFirst() इसकी शुरुआत से वापस दिए जाने वाले आइटम की ज़्यादा से ज़्यादा संख्या सेट करता है नतीजों की क्रम वाली सूची.
LimitToLast() यह तय करता है कि ऑर्डर की गई अवधि के आखिर से, ज़्यादा से ज़्यादा कितने आइटम लौटाए जा सकते हैं नतीजों की सूची.
StartAt() वे आइटम लौटाने के लिए जो बताई गई कुंजी या मान से बड़ी या उसके बराबर हैं यह चुने गए क्रम के हिसाब से तय होता है.
EndAt() वे आइटम दिखाए जाएं जिनकी वैल्यू, दी गई कुंजी या वैल्यू से कम या उसके बराबर है यह चुने गए क्रम के हिसाब से तय होता है.
EqualTo() बताई गई कुंजी या वैल्यू के बराबर के आइटम वापस करें यह चुने गए क्रम के हिसाब से तय होता है.

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

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

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

LimitToFirst() और LimitToLast() तरीकों का इस्तेमाल करके किसी दिए गए कॉलबैक के लिए सिंक किए जाने वाले बच्चों की ज़्यादा से ज़्यादा संख्या. उदाहरण के लिए, अगर तो आप LimitToFirst() का इस्तेमाल करके 100 की सीमा सेट करते हैं. शुरुआत में 100 ChildAdded कॉलबैक तक. अगर आपने अपने स्टोर में 100 से कम आइटम सेव किए हैं, Firebase डेटाबेस, हर आइटम के लिए ChildAdded कॉलबैक ट्रिगर होता है.

आइटम बदलने पर आपको ChildAdded कॉलबैक मिलते हैं, जो क्वेरी और ChildRemoved कॉलबैक से बाहर आ जाते हैं, ताकि तो कुल संख्या 100 ही रहती है.

उदाहरण के लिए, नीचे दिया गया कोड लीडरबोर्ड से सबसे ज़्यादा स्कोर दिखाता है:

      FirebaseDatabase.DefaultInstance
        .GetReference("Leaders").OrderByChild("score").LimitToLast(1)
        .ValueChanged += HandleValueChanged;
    }

    void HandleValueChanged(object sender, ValueChangedEventArgs args) {
      if (args.DatabaseError != null) {
        Debug.LogError(args.DatabaseError.Message);
        return;
      }
      // Do something with the data in args.Snapshot
    }

कुंजी या वैल्यू के हिसाब से फ़िल्टर करें

अपनी पसंद का विकल्प चुनने के लिए, StartAt(), EndAt(), और EqualTo() का इस्तेमाल किया जा सकता है क्वेरी के लिए प्रारंभ, अंत, और समतुल्य बिंदु. यह इन कामों में मददगार हो सकता है डेटा को पेजों में बांटना या बच्चों के उन आइटम को ढूंढना जिनका कोई खास मान होता है.

क्वेरी डेटा को क्रम से कैसे लगाया जाता है

इस सेक्शन में बताया गया है कि Query क्लास.

OrderByChild

OrderByChild() का इस्तेमाल करते समय, वह डेटा जिसमें यह चाइल्ड कुंजी शामिल होती है इस तरह ऑर्डर किया गया:

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

OrderByKey

डेटा को क्रम से लगाने के लिए OrderByKey() का इस्तेमाल करने पर, डेटा बढ़ते क्रम में दिखता है बटन से.

  1. जिन बच्चों के पास कुंजी होती है उन्हें 32-बिट वाले पूर्णांक के तौर पर पार्स किया जा सकता है उन्हें बढ़ते क्रम में क्रम में लगाया जाता है.
  2. जिन बच्चों में स्ट्रिंग वैल्यू के आगे मुख्य होता है उन्हें बढ़ते क्रम में लेक्सिकोग्राफ़ी के हिसाब से क्रम में लगाया जाता है.

OrderByValue

OrderByValue() का इस्तेमाल करते समय, बच्चों को उनकी वैल्यू के हिसाब से क्रम में लगाया जाता है. ऑर्डर करने के लिए मानदंड OrderByChild() के समान है, लेकिन नोड का मान यह है का उपयोग किसी खास चाइल्ड कुंजी के मान के बजाय किया जाता है.