FIRDatabaseReference पाएं
डेटाबेस से डेटा पढ़ने या उसमें बदलाव करने के लिए, आपको के इंस्टेंस की ज़रूरत होगी
FIRDatabaseReference
:
Swift
var ref: DatabaseReference! ref = Database.database().reference()
Objective-C
@property (strong, nonatomic) FIRDatabaseReference *ref; self.ref = [[FIRDatabase database] reference];
पढ़ने और लिखने की सूचियां
डेटा की सूची में जोड़ें
एक से ज़्यादा उपयोगकर्ताओं वाली किसी सूची में डेटा जोड़ने के लिए, childByAutoId
तरीके का इस्तेमाल करें
का इस्तेमाल करें. childByAutoId
तरीका, हर बार नई कुंजी जनरेट करता है
चाइल्ड को तय किए गए Firebase रेफ़रंस में जोड़ दिया जाता है. इनका इस्तेमाल करके
सूची के हर एक नए एलिमेंट के लिए अपने-आप जनरेट होने वाली कुंजियां, कई क्लाइंट जोड़ सकते हैं
एक ही समय पर बच्चों को एक ही जगह पर ले जाएं. साथ ही, इस पर लिखने में कोई गड़बड़ी न हो. कॉन्टेंट बनाने
childByAutoId
से जनरेट की गई यूनीक कुंजी, टाइमस्टैंप पर आधारित है. इसलिए, आइटम की सूची बनाएं
और वे, समय के हिसाब से अपने-आप क्रम में हो जाते हैं.
childByAutoId
तरीके से मिले नए डेटा के रेफ़रंस का इस्तेमाल किया जा सकता है
का इस्तेमाल किया जा सकता है.
childByAutoId
पहचान फ़ाइल पर getKey
को कॉल करने से, अपने-आप जनरेट हुई कुंजी दिखती है.
अपने-आप जनरेट होने वाली इन कुंजियों का इस्तेमाल करके, अपने डेटा को आसानी से बराबर किया जा सकता है स्ट्रक्चर. ज़्यादा जानकारी के लिए, 'फ़ैन-आउट' डेटा देखें उदाहरण के लिए.
बच्चों के लिए बने इवेंट सुनें
चाइल्ड इवेंट, एक कन्वर्ज़न ऐक्शन की वजह से ट्रिगर होते हैं.
किसी कार्रवाई से नोड के चिल्ड्रेन जैसे
childByAutoId
तरीका या इसकी मदद से किसी चाइल्ड को अपडेट किया जा रहा है
updateChildValues
तरीका.
इवेंट प्रकार | आम तौर पर इस्तेमाल |
---|---|
FIRDataEventTypeChildAdded |
आइटम की सूचियां पाएं या आइटम की सूची में जोड़े गए आइटम सुनें. यह इवेंट हर मौजूदा बच्चे के लिए एक बार ट्रिगर होता है. इसके बाद, यह फिर से ट्रिगर होता है तय पाथ में हर बार कोई नया चाइल्ड जोड़ने पर. इस गाने को सुनने वाले लोग हैं ने नए बच्चे के डेटा वाला एक स्नैपशॉट पास किया. |
FIRDataEventTypeChildChanged |
सूची में मौजूद आइटम में हुए बदलावों को सुनें. चाइल्ड नोड में बदलाव होने पर यह इवेंट ट्रिगर होता है. इसमें चाइल्ड नोड के डिसेंडेंट. इवेंट लिसनर को भेजा गया स्नैपशॉट इसमें बच्चे का अपडेट किया गया डेटा शामिल होता है. |
FIRDataEventTypeChildRemoved |
सूची से हटाए जा रहे आइटम सुनें. यह इवेंट तब ट्रिगर होता है, जब इस चाइल्ड खाते को तुरंत हटा दिया जाता है.कॉलबैक ब्लॉक को दिया गया स्नैपशॉट इसमें, हटाए गए बच्चे का डेटा मौजूद होता है. |
FIRDataEventTypeChildMoved |
क्रम वाली सूची में आइटम के क्रम में हुए बदलावों को सुनें.
जब भी किसी अपडेट के कारण
बच्चा. इसका इस्तेमाल उस डेटा के साथ किया जाता है जिसे queryOrderedByChild
या queryOrderedByValue के हिसाब से क्रम में लगाया जाता है.
|
ये सभी तरीके एक साथ इस्तेमाल से, किसी खास संगठन में हुए बदलावों को सुनने में मदद मिल सकती है नोड में डालें. उदाहरण के लिए, कोई सोशल ब्लॉगिंग ऐप्लिकेशन इन तरीकों का इस्तेमाल कर सकता है साथ मिलकर पोस्ट की टिप्पणियों पर गतिविधि की निगरानी करते हैं, जैसा कि नीचे दिखाया गया है:
Swift
// Listen for new comments in the Firebase database commentsRef.observe(.childAdded, with: { (snapshot) -> Void in self.comments.append(snapshot) self.tableView.insertRows( at: [IndexPath(row: self.comments.count - 1, section: self.kSectionComments)], with: UITableView.RowAnimation.automatic ) }) // Listen for deleted comments in the Firebase database commentsRef.observe(.childRemoved, with: { (snapshot) -> Void in let index = self.indexOfMessage(snapshot) self.comments.remove(at: index) self.tableView.deleteRows( at: [IndexPath(row: index, section: self.kSectionComments)], with: UITableView.RowAnimation.automatic ) })
Objective-C
// Listen for new comments in the Firebase database [_commentsRef observeEventType:FIRDataEventTypeChildAdded withBlock:^(FIRDataSnapshot *snapshot) { [self.comments addObject:snapshot]; [self.tableView insertRowsAtIndexPaths:@[ [NSIndexPath indexPathForRow:self.comments.count - 1 inSection:kSectionComments] ] withRowAnimation:UITableViewRowAnimationAutomatic]; }]; // Listen for deleted comments in the Firebase database [_commentsRef observeEventType:FIRDataEventTypeChildRemoved withBlock:^(FIRDataSnapshot *snapshot) { int index = [self indexOfMessage:snapshot]; [self.comments removeObjectAtIndex:index]; [self.tableView deleteRowsAtIndexPaths:@[[NSIndexPath indexPathForRow:index inSection:kSectionComments]] withRowAnimation:UITableViewRowAnimationAutomatic]; }];
वैल्यू इवेंट सुनें
बच्चों के इवेंट सुनते समय, डेटा की सूचियां पढ़ने का सुझाव दिया जाता है. ऐसी स्थितियां हैं जिनमें वैल्यू इवेंट को सुनना फ़ायदेमंद होता है.
डेटा की सूची में FIRDataEventTypeValue
ऑब्ज़र्वर अटैच करने पर
डेटा की पूरी सूची एक DataSnapshot के तौर पर दिखेगी. इसके बाद, उसे लूप में चलाया जा सकता है
अलग-अलग बच्चों को ऐक्सेस दें.
भले ही क्वेरी के लिए सिर्फ़ एक मैच हो, फिर भी स्नैपशॉट सूची; इसमें सिर्फ़ एक आइटम होता है. आइटम को ऐक्सेस करने के लिए, आपको लूप करना होगा इस नतीजे पर:
Swift
_commentsRef.observe(.value) { snapshot in for child in snapshot.children { ... } }
Objective-C
[_commentsRef observeEventType:FIRDataEventTypeValue withBlock:^(FIRDataSnapshot *snapshot) { // Loop over children NSEnumerator *children = [snapshot children]; FIRDataSnapshot *child; while (child = [children nextObject]) { // ... } }];
यह पैटर्न तब काम का हो सकता है, जब किसी सूची में मौजूद सभी चिल्ड्रेन को फ़ेच करना हो एक ही कार्रवाई में, जोड़े गए अतिरिक्त बच्चे को सुनने के बजाय इवेंट.
डेटा को क्रम से लगाना और फ़िल्टर करना
क्रम से लगाए गए डेटा को वापस पाने के लिए, रीयलटाइम डेटाबेस FIRDatabaseQuery
क्लास का इस्तेमाल किया जा सकता है
कुंजी, मान या फिर बच्चे की अहमियत के हिसाब से. फ़िल्टर भी किया जा सकता है
नतीजों की तय संख्या या कुंजियों की रेंज के लिए क्रम से लगाया गया नतीजा या
वैल्यू.
डेटा को क्रम से लगाएं
क्रम से लगाए गए डेटा को वापस पाने के लिए, सबसे पहले तय करें कि नतीजे कैसे क्रम में दिखेंगे:
तरीका | इस्तेमाल किए जाने से जुड़ी जानकारी |
---|---|
queryOrderedByKey
| चाइल्ड कुंजियों के हिसाब से नतीजों को क्रम से लगाएं. |
queryOrderedByValue |
चाइल्ड वैल्यू के हिसाब से नतीजों को क्रम से लगाएं. |
queryOrderedByChild |
किसी खास चाइल्ड कुंजी या नेस्ट किए गए चाइल्ड पाथ की वैल्यू के हिसाब से नतीजों को क्रम से लगाएं. |
ऑर्डर करने के लिए, एक बार में सिर्फ़ एक तरीका इस्तेमाल किया जा सकता है. आदेश-दर-चरण कॉल करना एक ही क्वेरी में कई बार आने पर गड़बड़ी होती है.
नीचे दिया गया उदाहरण दिखाता है कि किसी उपयोगकर्ता की शीर्ष पोस्ट को उनकी स्टार संख्या के अनुसार क्रमबद्ध किया गया है:
Swift
// My top posts by number of stars let myTopPostsQuery = ref.child("user-posts").child(getUid()).queryOrdered(byChild: "starCount")
Objective-C
// My top posts by number of stars FIRDatabaseQuery *myTopPostsQuery = [[[self.ref child:@"user-posts"] child:[super getUid]] queryOrderedByChild:@"starCount"];
यह क्वेरी इन पर आधारित डेटाबेस में पाथ से उपयोगकर्ता की पोस्ट फिर से इकट्ठा करती है हर पोस्ट को मिले स्टार की संख्या के हिसाब से क्रम में लगाया गया अपना यूज़र आईडी. यह ID को इंडेक्स कुंजियों के तौर पर इस्तेमाल करने की तकनीक को डेटा फ़ैन आउट कहते हैं. ज़्यादा जानकारी के लिए, अपने डेटाबेस का स्ट्रक्चर तैयार करें.
queryOrderedByChild
तरीके को किए जाने वाले कॉल से, ऑर्डर करने के लिए चाइल्ड कुंजी तय की जाती है
इसके हिसाब से नतीजे देखें. इस उदाहरण में, पोस्ट को
हर पोस्ट में "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
कुंजी जोड़ने के लिए, हम नेस्ट किए गए चाइल्ड का रिलेटिव पाथ तय करते हैं
queryOrderedByChild
कॉल.
Swift
let postsByMostPopular = ref.child("posts").queryOrdered(byChild: "metrics/views")
Objective-C
FIRDatabaseQuery *postsByMostPopular = [[ref child:@"posts"] queryOrderedByChild:@"metrics/views"];
अन्य डेटा टाइप को क्रम से लगाने के तरीके के बारे में ज़्यादा जानने के लिए, क्वेरी डेटा को क्रम से लगाने का तरीका देखें.
डेटा फ़िल्टर करना
डेटा फ़िल्टर करने के लिए, सीमा या रेंज में से किसी एक तरीके को क्वेरी तैयार करते समय, एक-एक करके तय किए गए क्रम में.
तरीका | इस्तेमाल किए जाने से जुड़ी जानकारी |
---|---|
queryLimitedToFirst |
इसकी शुरुआत से वापस दिए जाने वाले आइटम की ज़्यादा से ज़्यादा संख्या सेट करता है नतीजों की क्रम वाली सूची. |
queryLimitedToLast |
यह तय करता है कि ऑर्डर की गई अवधि के आखिर से, ज़्यादा से ज़्यादा कितने आइटम लौटाए जा सकते हैं नतीजों की सूची. |
queryStartingAtValue |
वे आइटम दिखाएं जो मौजूद कुंजी या वैल्यू से बड़ी या उसके बराबर हों, यह चुने गए क्रम के हिसाब से तय होता है. |
queryStartingAfterValue |
वे आइटम दिखाए जाएं जिनकी वैल्यू, दी गई कुंजी या वैल्यू से ज़्यादा हो, यह चुने गए क्रम के हिसाब से तय होता है. |
queryEndingAtValue |
वे आइटम दिखाए जाएं जिनकी वैल्यू, दी गई कुंजी या वैल्यू से कम या उसके बराबर है, यह चुने गए क्रम के हिसाब से तय होता है. |
queryEndingBeforeValue |
वे आइटम दिखाएं जो तय की गई कुंजी या वैल्यू से कम हों, यह चुने गए क्रम के हिसाब से तय होता है. |
queryEqualToValue |
निर्दिष्ट कुंजी या मान के बराबर, आइटम वापस करें विधि चुनी गई. |
क्रम के हिसाब से क्रम में लगाने वाले तरीकों के उलट, एक से ज़्यादा सीमा या रेंज फ़ंक्शन को जोड़ा जा सकता है.
उदाहरण के लिए, सीमा तय करने के लिए, queryStartingAtValue
और queryEndingAtValue
तरीकों को मिलाया जा सकता है
वैल्यू की तय सीमा तक नतीजे दिखाता है.
नतीजों की संख्या को सीमित करें
queryLimitedToFirst
और queryLimitedToLast
तरीकों का इस्तेमाल करके
किसी दिए गए कॉलबैक के लिए सिंक किए जाने वाले बच्चों की ज़्यादा से ज़्यादा संख्या. उदाहरण के लिए, अगर
तो आप queryLimitedToFirst
का इस्तेमाल करके 100 की सीमा सेट करते हैं. शुरुआत में
100 FIRDataEventTypeChildAdded
कॉलबैक तक. अगर आपने अपने स्टोर में 100 से कम आइटम सेव किए हैं,
Firebase डेटाबेस, हर आइटम के लिए FIRDataEventTypeChildAdded
कॉलबैक ट्रिगर होता है.
आइटम बदलने पर आपको FIRDataEventTypeChildAdded
कॉलबैक मिलते हैं, जो
क्वेरी और FIRDataEventTypeChildRemoved
कॉलबैक से बाहर आ जाते हैं, ताकि
तो कुल संख्या 100 ही रहती है.
नीचे दिया गया उदाहरण दिखाता है कि उदाहरण के तौर पर दिया गया ब्लॉगिंग ऐप्लिकेशन, सभी उपयोगकर्ताओं की सबसे हाल की 100 पोस्ट की सूची:
Swift
// Last 100 posts, these are automatically the 100 most recent // due to sorting by push() keys let recentPostsQuery = (ref?.child("posts").queryLimited(toFirst: 100))!
Objective-C
// Last 100 posts, these are automatically the 100 most recent // due to sorting by push() keys FIRDatabaseQuery *recentPostsQuery = [[self.ref child:@"posts"] queryLimitedToFirst:100];
कुंजी या वैल्यू के हिसाब से फ़िल्टर करें
आपके पास queryStartingAtValue
, queryStartingAfterValue
,
queryEndingAtValue
, queryEndingBeforeValue
, और queryEqualToValue
का इस्तेमाल करें. यह
डेटा को पेजों में बांटने या उन बच्चों के आइटम ढूंढने में मदद कर सकता है जिनके पास
तय करें.
क्वेरी डेटा को क्रम से कैसे लगाया जाता है
इस सेक्शन में बताया गया है कि
FIRDatabaseQuery
क्लास.
queryOrderedByKey
डेटा को क्रम से लगाने के लिए queryOrderedByKey
का इस्तेमाल करने पर, डेटा बढ़ते क्रम में दिखता है
बटन से.
- जिन बच्चों के पास कुंजी होती है उन्हें 32-बिट वाले पूर्णांक के तौर पर पार्स किया जा सकता है उन्हें बढ़ते क्रम में क्रम में लगाया जाता है.
- जिन बच्चों में स्ट्रिंग वैल्यू के आगे मुख्य होता है उन्हें बढ़ते क्रम में लेक्सिकोग्राफ़ी के हिसाब से क्रम में लगाया जाता है.
queryOrderedByValue
queryOrderedByValue
का इस्तेमाल करते समय, बच्चों को उनकी वैल्यू के हिसाब से क्रम में लगाया जाता है. ऑर्डर करने के लिए
मानदंड queryOrderedByChild
के समान है, लेकिन नोड का मान यह है
का उपयोग किसी खास चाइल्ड कुंजी के मान के बजाय किया जाता है.
queryOrderedByChild
queryOrderedByChild
का इस्तेमाल करते समय, वह डेटा जिसमें यह चाइल्ड कुंजी शामिल होती है
इस तरह ऑर्डर किया गया:
- तय की गई चाइल्ड कुंजी के लिए
nil
वैल्यू वाले बच्चे चुनें. - किसी खास चाइल्ड कुंजी के लिए,
false
वैल्यू वाले चिल्ड्रन अगला आओ. अगर एक से ज़्यादा चाइल्ड खातों की वैल्यूfalse
है, तो वे कुंजी के हिसाब से लेक्सिकोग्राफ़िक तौर पर क्रम में लगाया जाता है. - किसी खास चाइल्ड कुंजी के लिए,
true
वैल्यू वाले चिल्ड्रन अगला आओ. अगर एक से ज़्यादा चाइल्ड खातों की वैल्यूtrue
है, तो वे जिन्हें कुंजी के हिसाब से लेक्सिकोग्राफ़िक तौर पर क्रम में लगाया जाता है. - अंकों वाली वैल्यू वाले बच्चे आगे बढ़ते हैं. इन्हें बढ़ते क्रम में लगाया जाता है. अगर आपने कई चाइल्ड एंट्री में किसी खास चाइल्ड खाते के लिए एक ही संख्या वाली वैल्यू हो नोड, वे कुंजी के हिसाब से क्रम में लगाए जाते हैं.
- स्ट्रिंग, संख्याओं के बाद आती हैं. इन्हें बढ़ते हुए क्रम में, कोशिकीय तरीके से क्रम में लगाया जाता है ऑर्डर. अगर बताए गए चाइल्ड के लिए कई चाइल्ड पब्लिशर के पास एक ही वैल्यू है नोड में वे लेक्सिकोग्राफ़िक रूप से कुंजी के आधार पर व्यवस्थित होते हैं.
- ऑब्जेक्ट आखिरी में आते हैं और उन्हें बढ़ते क्रम में कुंजी के हिसाब से लेक्सिकोग्राफ़िक तरीके से क्रम में लगाया जाता है.
लिसनर को अलग करें
जब उपयोगकर्ता किसी तीसरे पक्ष की किसी साइट को
ViewController
. अगर ऑब्ज़र्वर को ठीक से नहीं हटाया गया, तो वह सिंक होता रहेगा
डेटा को लोकल मेमोरी में सेव करता है और इवेंट हैंडलर में कैप्चर किए गए सभी ऑब्जेक्ट को बनाए रखेगा
बंद कर देता है, जिससे मेमोरी लीक हो सकती है. जब ऑब्ज़र्वर की ज़रूरत न हो,
इसे निकालने के लिए संबंधित FIRDatabaseHandle
को
removeObserverWithHandle
तरीका.
किसी पहचान फ़ाइल में कॉलबैक ब्लॉक जोड़ने पर, FIRDatabaseHandle
दिखता है.
इन हैंडल का इस्तेमाल कॉलबैक ब्लॉक को हटाने के लिए किया जा सकता है.
अगर डेटाबेस रेफ़रंस में एक से ज़्यादा लिसनर जोड़े गए हैं, तो हर लिसनर
किसी इवेंट के शुरू होने पर कॉल किया जाता है. उस जगह पर डेटा सिंक होने से रोकने के लिए,
आपको removeAllObservers
पर कॉल करके किसी जगह पर मौजूद सभी ऑब्ज़र्वर को हटाना होगा
तरीका.
लिसनर पर removeObserverWithHandle
या removeAllObservers
को कॉल करने से ऐसा होता है
अपने चाइल्ड नोड पर रजिस्टर किए गए लिसनर को अपने-आप नहीं हटाएं; आपको भी ज़रूरी है कि
उन रेफ़रंस या हैंडल को हटाने के लिए उनका ट्रैक रखें.